JDK 8 で導入された新機能により、バイナリ互換性を維持しながら既存のインターフェースに追加できます。
構文は次のようになります
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
このように、既存のすべての実装でSomeInterface
、この新しいバージョンにアップグレードするときに、すべてが突然コンパイル エラーになるわけではありませんnewInterface()
。
これは素晴らしいことですが、実装していない新しいデフォルト メソッドを両方とも追加した 2 つのインターフェイスを実装するとどうなるでしょうか。例を挙げて説明しましょう。
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-February/000068.htmlで同様のことについて話しているのを見つけましたが、それはプライベート メーリング リストの一部であり、直接尋ねることはできません。
JDK 8 でデフォルトがどのように使用されるか、およびコレクション インターフェイスを拡張してラムダをサポートする方法の詳細については、 https ://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf を参照してください。