2010-01-18 7 views
15

Warum ist die Methode iterator() in der Schnittstelle java.util.Collection definiert, wenn sie java.util.Iterable bereits erweitert hat, für die diese Methode definiert ist.Warum gibt es eine Methode iterator() in java.util.Collection

Ich denke eine Art Rückwärtskompatibilität oder eine Möglichkeit, JavaDoc auf der Methode auf der Sammlungsebene zu schreiben.

Irgendwelche anderen Ideen?

+0

netter Fang, ich zweite die rückwärts Vergleichbarkeit Sache, nicht sicher, obwohl – medopal

+0

Es gibt eine ähnliche SO Frage (mein Google Fu fehlt) Umgang mit 'Set' vs' Collection', die die gleiche Methode Deklarationen haben, und sie wurden eingeführt in der gleichen Version (1.2). –

Antwort

3

Ich habe weitere Untersuchungen durchgeführt und festgestellt, dass die Methoden equals() und hashcode() ebenfalls überschrieben werden.

Offensichtlich kann der einzige Grund dafür sein, das Javadoc hinzuzufügen - vielleicht wurde deshalb auch iterator() überschrieben.

9

Abwärtskompatibilität. Iterable wurde erst mit dem for-Konstrukt (Object o: iterable) bis 1.5 eingeführt. Zuvor mussten alle Sammlungen ein Mittel bereitstellen, um sie zu iterieren.

+0

iterator() existiert nicht nur aus Gründen der Abwärtskompatibilität; Es ist oft nützlich, direkt mit dem Iterator zu arbeiten. – Adamski

+1

@Adamski, Dan fragt, warum die Methode sowohl für Collection als auch für Iterable deklariert wird, wenn Collection Iterable erweitert wird. Ihr Punkt scheint zu adressieren "Warum gibt es eine Methode .iterator(), Zeitraum?" was niemand fragt. –

+0

Ja - Entschuldigung; Ich erkannte das und trashte meine Antwort! – Adamski

6

Ich vermute, es war nur, um das Aussehen zu vermeiden, eine Methode aus einer Dokumentation Sicht zu entfernen. Obwohl Javadoc nett ist, wäre es schwierig, eine Methode zu bemerken, die von einer Schnittstelle zu einer Superschnittstelle bewegt wird.

Hinweis das gleiche wurde mit Closeable, auch in 1.5 eingeführt.

Soweit ich weiß, gäbe es keine Probleme mit der Binärkompatibilität beim Entfernen der Methode aus der Collection-Klasse.

+0

In der Tat gibt es auch kein Quellkompatibilitätsproblem. ('Collection' Schnittstelle, BTW). Ich glaube, dass Sie eine metalinguistische Einrichtung, wie zum Beispiel Reflexion, benötigen, um den Unterschied zur Laufzeit zu erkennen. –

3

Iterable wurde in 1.5 eingeführt. Da es Teil von Collection vor 1.5 war, haben sie es wahrscheinlich gerade nicht entfernt. Und wie der andere Teilnehmer darauf hingewiesen hat, ist JavaDoc besser.

Verwandte Themen