Warum java.util.Iterator
Schnittstelle hat Methode remove()
?Verletzung der Single-Verantwortung-Prinzip in Iterator von Java-Core
Sicher manchmal ist diese Methode notwendig und alle haben sich an seine Anwesenheit gewöhnt. Tatsächlich besteht das Hauptziel des Iterators lediglich darin, Zugriffscontainerelemente bereitzustellen. Und wenn jemand seine eigene Implementierung für diese Schnittstelle erstellen möchte und nicht aus irgendeinem Grund die Möglichkeit haben will, ein Element zu entfernen, dann ist er gezwungen, UnsupportedOperationException
zu werfen. Das Auslösen dieser Ausnahme weist normalerweise auf eine nicht allzu durchdachte Architektur oder auf einige Designfehler hin.
Wirklich verstehe ich nicht die Gründe für eine solche Entscheidung. Und ich denke, es wäre mehr richtig einen bestimmten Subschnittstelle trennt die optionale Methode zu unterstützen:
keine begründete Version warum remove()
Teil der Iterator
ist? Ist das nicht ein Beispiel für eine direkte Verletzung des Grundsatzes der einheitlichen Verantwortung von SOLID
?
Eigentlich ist das „Iterator ohne remove-Semantik“, die Sie hier vorschlagen, ist gleichbedeutend mit dem Erbe [ 'Enumeration'] (http://docs.oracle.com/javase/8/docs/api/java/util/ Enumeration.html) Schnittstelle, die in Java 1.2 durch 'Iterator' ersetzt wurde. –
Was ist der andere Veränderungsvektor neben "Ein neuer Typ der zugrunde liegenden Sammlung wird eingeführt"? Wenn Sie SRP als "zu viele Dinge" statt "zu viele Gründe, um sich zu ändern" denken, werden Sie irgendwann in eine verrückte normale Form geraten, wo jede Methode in Ihrem Programm eine eigene Schnittstelle hat. – Affe