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 SomeInterfacecuando 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