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 UnsupportedOperationException
si elles ne veulent tout simplement pas implémenter cette méthode.
Un exemple de ceci est la addAll
mé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 UnsupportedOperationException
sorte le but? Cela signifie que je ne peux plus passer Set
et simplement utiliser addAll
. Au contraire, je dois savoir quelle implémentation de Set
j'ai été adoptée, donc je peux savoir si je peux l'utiliser addAll
ou 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.zip
il 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.
addAll
dansHashSet
. Il s'en remet à l'implémentation par défaut dansAbstractCollection
laquelle ne jette certainement pasUnsupportedOperationException
.