Une nouvelle fonctionnalité à venir dans le JDK 8 vous permet d'ajouter à une interface existante, tout en préservant la compatibilité binaire.
La syntaxe est comme
public interface SomeInterface() {
void existingInterface();
void newInterface() default SomeClass.defaultImplementation;
}
De cette façon, pour toutes les implémentations existantes de l' SomeInterface
lors de leur mise à niveau vers cette nouvelle version, ils ne sont pas tous tout d'un coup une compile des erreurs autour de newInterface()
.
Alors que c'est soigné, ce qui se passe quand vous êtes à la mise en œuvre de deux des interfaces qui ont ajouté une nouvelle méthode par défaut que vous n'avez pas le mettre en œuvre? Laissez-moi vous expliquer avec un exemple.
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();
Cela a été défini dans le cadre du JDK 8?
J'ai trouvé la Java des dieux de parler de quelque chose de similaire ici http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.htmlmais sa partie de la liste de diffusion privée et je ne peux pas leur demander directement.
Voir ce pour plus de détails sur la façon dont les valeurs par défaut seront utilisées dans le JDK 8 et l'extension de l'interface de Collecte pour soutenir les lambdas: https://oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf