Una nueva característica que viene en JDK 8 le permite agregar a una interfaz existente mientras conserva la compatibilidad binaria.
La sintaxis es como
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
De esta manera, para todas las implementaciones existentes de SomeInterface
cuando se actualizan a esta nueva versión, no todas tienen errores de compilación repentinamente newInterface()
.
Si bien esto es bueno, ¿qué sucede cuando implementa dos interfaces que han agregado un nuevo método predeterminado que no implementó? Dejame explicarte con un ejemplo.
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();
¿Esto ya se ha definido como parte de JDK 8?
Encontré a los dioses de Java hablando de algo similar aquí http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html , pero es parte de una lista de correo privada y no puedo preguntarles directamente.
Consulte esto para obtener más detalles sobre cómo se utilizarán los valores predeterminados en JDK 8 y extender la interfaz de la colección para admitir lambdas: https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf