Mit einer neuen Funktion in JDK 8 können Sie eine vorhandene Schnittstelle erweitern und gleichzeitig die Binärkompatibilität beibehalten.
Die Syntax ist wie
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
Auf diese Weise SomeInterfacetreten bei allen vorhandenen Implementierungen beim Upgrade auf diese neue Version nicht alle plötzlich Kompilierungsfehler auf newInterface().
Was passiert, wenn Sie zwei Schnittstellen implementieren, die beide eine neue Standardmethode hinzugefügt haben, die Sie nicht implementiert haben? Lassen Sie mich anhand eines Beispiels erklären.
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();
Wurde dies bereits als Teil von JDK 8 definiert?
Ich fand die Java-Götter, die hier über etwas Ähnliches sprachen: http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html , aber es ist Teil der privaten Mailingliste und ich kann sie nicht direkt fragen.
Weitere Informationen zur Verwendung der Standardeinstellungen in JDK 8 und zur Erweiterung der Collection-Oberfläche zur Unterstützung von Lambdas finden Sie hier: https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf