Являются ли значения по умолчанию в JDK 8 формой множественного наследования в Java?

Новая функция, появившаяся в JDK 8, позволяет добавлять к существующему интерфейсу, сохраняя двоичную совместимость.

Синтаксис похож на

public interface SomeInterface() {
  void existingInterface();
  void newInterface() default SomeClass.defaultImplementation;
}

Этот способ для всех существующих реализаций SomeInterface при обновлении до этой новой версии не у всех внезапно возникают ошибки компиляции около newInterface () .

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

public interface Attendance {
   boolean present() default DefaultAttendance.present;
}

public interface Timeline {
   boolean present() default DefaultTimeline.present;
}

public class TimeTravelingStudent implements Attendance, Timeline {

}

// which code gets called?
new TimeTravelingStudent().present();

Было ли это определено как часть JDK 8?

Я обнаружил, что боги Java говорят о чем-то похожем здесь http://cs.oswego.edu/pipermail/lambda-lib/2011-Feb February/ 000068.html , но это часть частного списка рассылки, и я не могу спросить их напрямую.

См. Здесь для получения дополнительных сведений о том, как будут использоваться значения по умолчанию в JDK 8 и о расширении интерфейса Collection для поддержки лямбда-выражений: https://oracleus.wingateweb.com/published/oracleus2011/ sessions / 25066 / 25066_Cho223662.pdf

80
задан Jacob G. 10 May 2017 в 00:32
поделиться