Новая функция, входящая в 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