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 SomeInterface
treten 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