En parcourant le Java Collections Framework, j'ai remarqué que bon nombre des interfaces ont le commentaire (optional operation). Ces méthodes permettent à des classes d'implémentation de passer par UnsupportedOperationExceptionsi elles ne veulent tout simplement pas implémenter cette méthode.
Un exemple de ceci est la addAllméthode dans le Set Interface.
Maintenant, comme indiqué dans cette série de questions, les interfaces sont un contrat déterminant pour ce que l'utilisation peut en attendre.
Les interfaces sont importantes car elles séparent ce que fait une classe de la façon dont elle le fait. Le contrat définissant ce à quoi un client peut s'attendre laisse le développeur libre de l'implémenter comme bon lui semble, tant qu'il respecte le contrat.
et
Une interface est une description des actions qu'un objet peut effectuer ... par exemple, lorsque vous actionnez un interrupteur d'éclairage, la lumière s'allume, vous ne vous souciez pas de savoir comment, tout simplement. Dans la programmation orientée objet, une interface est une description de toutes les fonctions qu'un objet doit avoir pour être un "X".
et
Je pense que l'approche basée sur l'interface est beaucoup plus agréable. Vous pouvez ensuite bien simuler vos dépendances, et tout est fondamentalement moins étroitement couplé.
Quel est l'intérêt d'une interface?
Interface + extension (mixin) vs classe de base
Étant donné que le but des interfaces est de définir un contrat et de coupler vos dépendances de manière lâche, le fait que certaines méthodes ne vident pas en quelque UnsupportedOperationExceptionsorte le but? Cela signifie que je ne peux plus passer Setet simplement utiliser addAll. Au contraire, je dois savoir quelle implémentation de Setj'ai été adoptée, donc je peux savoir si je peux l'utiliser addAllou non. Cela me semble assez inutile.
Alors à quoi ça sert UnsupportedOperationException? Est-ce juste pour compenser le code hérité, et ils doivent nettoyer leurs interfaces? Ou a-t-il un objectif plus sensé qui me manque?
src.zipil fonctionne très bien. Cela aide à savoir exactement quel code le JRE exécute parfois et à ne pas s'en remettre au JavaDoc qui peut être un peu bavard.
addAlldansHashSet. Il s'en remet à l'implémentation par défaut dansAbstractCollectionlaquelle ne jette certainement pasUnsupportedOperationException.