Interface privée méthodes, exemple de cas d'utilisation?
"De soutien pour les méthodes des interfaces a été brièvement en considération pour l'inclusion dans Java SE 8 dans le cadre de l'effort d'ajouter le support pour les Expressions Lambda, mais a été retiré afin de permettre de mieux se concentrer sur la plus haute priorité des tâches pour Java SE 8. Il est maintenant proposé que le soutien pour l'interface privée des méthodes d'entreprise, ce qui permet l'activation non résumé les méthodes d'une interface de partage de code entre eux."
C'est ce que dit le cahier des charges pour http://openjdk.java.net/jeps/213 et dit dans le rapport de bogue https://bugs.openjdk.java.net/browse/JDK-8071453 .
Mais je ne peux pas vraiment penser à des cas d'utilisation où cela est nécessaire, même avec la petite explication donnée ci-dessus. Puis-je demander pour un exemple où "interface privée méthodes" sont utiles en termes de code?
EDIT: Donc la réponse est que, en raison de la façon dont des implémentations par défaut ont été ajoutés à des interfaces en Java 8, il peut y avoir des cas où les implémentations par défaut sont en utilisant la même base de code.
Par exemple,
public interface MyInterface {
default void initializeMyClass(MyClass myClass, Params params) {
//do magical things in 100 lines of code to initialize myClass for example
}
default MyClass createMyClass(Params params) {
MyClass myClass = new MyClass();
initializeMyClass(myClass, params);
return myClass;
}
default MyClass createMyClass() {
MyClass myClass = new MyClass();
initializeMyClass(myClass, null);
return myClass;
}
}
Exemple stupide, je sais. Mais disons que nous voulons utiliser initializeMyClass(MyClass, Params)
dans les deux méthodes. Cependant, si on fait comme ceci (méthode par défaut), puis initializeMyClass(MyClass, Params)
fera partie de l'interface publique! Afin d'éviter cela, nous ne pouvons garder le code de toute la initializeMyClass(MyClass, Params)
à l'intérieur de la createMyClass()
méthodes par défaut. Qui entraîne la duplication de code, ce qui est indésirable.
Donc, ce qui provoque des problème de refactoring, et de supprimer une telle duplication de code, privé par défaut les méthodes sont autorisées.
Merci de répondre!
Vous devez vous connecter pour publier un commentaire.
Interfaces peuvent maintenant avoir méthodes par défaut. Ils ont été ajoutés, de sorte que de nouvelles méthodes pourraient être ajoutés à des interfaces sans casser toutes les classes qui implémentent les changé interfaces.
Si par défaut, deux méthodes sont nécessaires pour partager du code, une interface privée de la méthode pour le faire, mais sans exposer cette méthode privée et tous ses "détails de mise en œuvre" par l'intermédiaire de l'interface.
private
, je suppose qu'il ne peut pas être remplacée en aucune façon que seule l'interface est le seul à le voir, mais il peut être utilisé pour la mise en œuvre de méthodes par défaut, sans "polluer" l'interface avec la logique interne. De sens, merci!Pourquoi ne pas tout simplement (simplement = à l'aide de Java8):
PS: en raison de helper privées n'est pas possible en Java
Helper
classe!Helper
classe en tapantMyInterface.Helper
. Les méthodes privées dans les interfaces sont entièrement caché et inaccessible de l'extérieur de l'interface.Java 9 permet de déclarer une méthode privée à l'intérieur de l'interface.
Voici l'exemple de celui-ci.
Pour cela, vous devez mettre à jour jdk jusqu'à 1,9 version.