Поддерживает ли Java что-либо вроде модификатора c # new для функций? [Дубликат]

Я полагаю, вы также можете добавить это как переменную в свой файл spark-defaults.conf. Итак, что-то вроде:

spark.jars.packages    com.databricks:spark-csv_2.10:1.3.0

Это будет загружать библиотеку spark-csv в PySpark каждый раз при запуске драйвера.

Очевидно, что ответ нуля более гибкий, потому что вы можете добавить эти строки в свое приложение PySpark перед импортом пакета PySpark:

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.databricks:spark-csv_2.10:1.3.0 pyspark-shell'

from pyspark import SparkContext, SparkConf

Таким образом вы импортируете только те пакеты, которые вы на самом деле нужен для вашего скрипта.

92
задан nbro 18 September 2015 в 19:38
поделиться

8 ответов

Java поддерживает * ковариантные типы возврата для переопределенных методов. Это означает, что переопределенный метод может иметь конкретный тип возврата more . То есть, если новый тип возвращаемого значения присваивается возвращаемому типу метода, который вы переопределяете, это разрешено.

Например:

class ShapeBuilder {
    ...
    public Shape build() {
    ....
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
    ....
}

Это указано в раздел 8.4.5 Спецификации языка Java :

Типы возвращаемых данных могут варьироваться в зависимости от методов, которые переопределяют друг друга, если типы возвращаемого типа являются ссылочными типами. Понятие обратной подстановочной функции поддерживает ковариантные возвращения, то есть специализацию типа возврата к подтипу.

Объявление метода d1 с типом возврата R1 является возвращаемым типом-заменяемым для другого метода d2 с возвратным типом R2, тогда и только тогда, когда выполняются следующие условия:

  • Если R1 недействителен, то R2 является недействительным.
  • Если R1 является примитивным типом, то R2 является идентичен R1.
  • Если R1 является ссылочным типом, то: R1 является либо подтипом R2, либо R1 может быть преобразован в подтип R2 путем непроверенного преобразования (п. 5.1.9) или R1 = | R2 |

(«| R2 |» относится к стиранию R2, как определено в §4.6 JLS .)

< hr>

* До появления Java 5 у Java были типы возвращаемых инвариантных , что означало возвращаемый тип переопределения метода, необходимый для точного соответствия переопределяемого метода.

135
ответ дан Laurence Gonsalves 28 August 2018 в 08:22
поделиться

В общем, да, возвращаемый тип метода переопределения может быть другим. Но это не так. В этом случае есть некоторые случаи.

Случай 1: Если тип возврата является примитивным типом данных или void.

Выход: если тип возврата недействителен или примитив, тогда тип данных метода родительского класса и метод переопределения должны быть одинаковыми. например если тип возвращаемого значения - int, float, string, то он должен быть таким же

Случай 2: Если тип возвращаемого значения является производным типом данных:

Выход: если тип возвращаемого значения родительского класса метод является производным типом, тогда тип возврата метода переопределения - это тот же производный тип данных подкласса к производному типу данных. например Предположим, что у меня есть класс A B - подкласс к A C - подкласс к B D - это подкласс к C, то если если суперкласс возвращает тип A, то переопределяющий метод является подклассом, который может возвращать типы A, B, C или D i.e его подтипы. Это также называется ковариацией.

4
ответ дан Avinav Mishra 28 August 2018 в 08:22
поделиться

yes Возможно. Тип возврата может быть другим, только если тип возвращаемого типа родительского класса - это супер тип метода возвращаемого типа дочернего класса .. означает

            class ParentClass {
                  public Circle() method1() {
                    return new Cirlce();
                  }
            }

            class ChildClass extends ParentClass {
                  public Square method1() {
                     return new Square();
               }
            }


            Class Cirlce {

            }

            class Square extends Circle {

            }

        ---

Если это другое значение возвращаемый тип может быть разрешен ...

4
ответ дан Bosko Mijin 28 August 2018 в 08:22
поделиться

Да, если они возвращают подтип. Вот пример:

package com.sandbox;

public class Sandbox {

    private static class Parent {
        public ParentReturnType run() {
            return new ParentReturnType();
        }
    }

    private static class ParentReturnType {

    }

    private static class Child extends Parent {
        @Override
        public ChildReturnType run() {
            return new ChildReturnType();
        }
    }

    private static class ChildReturnType extends ParentReturnType {
    }
}

Этот код компилируется и запускается.

18
ответ дан Daniel Kaplan 28 August 2018 в 08:22
поделиться

Остальные ответы правильны, но, на удивление, все это не учитывает теоретический аспект: типы возврата могут быть разными, но они могут ограничивать только тип, используемый в суперклассе из-за Принципа замещения Лискова .

Это супер просто: когда у вас есть «клиентский» код, который вызывает некоторый метод:

int foo = someBar.bar();

, то вышеприведенное должно работать (и возвращать что-то, что является int независимо от того, какая реализация bar() вызывается).

Значение: если есть подкласс Bar, который переопределяет bar(), вам все равно придется возвращать то, что не нарушает «код вызывающего абонента», ,

Другими словами: предположим, что база bar() должна возвращать int. Затем подкласс может возвращать short - но не long, потому что вызывающие абоненты будут иметь дело с значением short, но не long!

0
ответ дан GhostCat 28 August 2018 в 08:22
поделиться

Да, это может отличаться, но у них есть некоторые ограничения.

Перед Java 5.0, когда вы переопределяете метод, оба параметра и тип возвращаемого значения должны точно совпадать. В Java 5.0 он вводит новый объект, называемый возвращаемым типом covariant. Вы можете переопределить метод с той же сигнатурой, но возвращает подкласс возвращаемого объекта. Другими словами, метод в подклассе может возвращать объект, тип которого является подклассом типа, возвращаемого методом с той же сигнатурой в суперклассе.

18
ответ дан Pankaj Goyal 28 August 2018 в 08:22
поделиться

ДА это возможно

class base {

 base show(){

System.out.println("base class");

return new base();

}
}

class sub extends base{

sub show(){

    System.out.println("sub class");

    return new sub();

 }
}

class inheritance{

 public static void main(String []args) {

        sub obj=new sub();

            obj.show();
 }
}
1
ответ дан Quazi Irfan 28 August 2018 в 08:22
поделиться

Типы переопределения и возврата, а также ковариантные возвращает подкласс должен точно определить метод, который соответствует унаследованной версии. Или, как и в случае с Java 5, вам разрешено изменять тип возврата в образце кода

                                                                                                            class Alpha {
          Alpha doStuff(char c) {
                  return new Alpha();
              }
           }
             class Beta extends Alpha {
                    Beta doStuff(char c) { // legal override in Java 1.5
                    return new Beta();
                    }
             } } 
. С Java 5 этот код будет скомпилирован. Если вы попытаетесь скомпилировать этот код с компилятором 1.4, то будете пытаться использовать несовместимый тип возврата - sandeep1987 1 мин. Назад

2
ответ дан sandeep1987 28 August 2018 в 08:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: