Pourquoi l'interface java.util.Iterator
a la méthode remove()
?Violation du principe de responsabilité unique dans Iterator à partir du cœur Java
Certes, cette méthode est parfois nécessaire et tous se sont habitués à sa présence. Mais en fait, l'objectif principal et unique de l'itérateur est simplement de fournir des éléments de conteneur d'accès. Et quand quelqu'un veut créer sa propre implémentation pour cette interface, et ne peut ou ne veut pour aucune raison fournir la possibilité de supprimer un élément, alors il est forcé de lancer UnsupportedOperationException
. Et le lancement de cette exception indique généralement une architecture pas trop bien pensée ou quelques défauts de conception. Vraiment je ne comprends pas les raisons d'une telle décision.
Et je suppose que ce serait plus correctement séparer une sous-interface spécifique pour soutenir la méthode facultative:
Toutes les versions raisonnés pourquoi remove()
fait partie du Iterator
? Cet exemple de violation directe du principe de la responsabilité unique n'est-il pas SOLID
?
En fait, le "itérateur sans suppression-sémantique" que vous proposez ici est équivalent à l'héritage ['Enumeration'] (http://docs.oracle.com/javase/8/docs/api/java/util/ Enumeration.html), qui a été remplacé par 'Iterator' dans Java 1.2. –
Quel est l'autre vecteur de changement en plus de "Un nouveau type de collection sous-jacente est introduit"? Si vous considérez SRP comme "faire trop de choses" au lieu de "avoir trop de raisons de changer", vous finirez par tomber dans une forme normale folle où chaque méthode de votre programme a sa propre interface. – Affe