2010-01-18 17 views
15

¿Por qué hay el método iterator() definido en la interfaz java.util.Collection cuando ya se extiende java.util.Iterable que tiene este mismo método definido.¿Por qué hay un método iterator() en java.util.Collection

Estoy pensando en algún tipo de compatibilidad hacia atrás o la oportunidad de escribir algo de JavaDoc sobre el método en el nivel de recopilación.

¿Alguna otra idea?

+0

nice catch, en segundo lugar la cosa comparabilidad hacia atrás, no estoy seguro aunque – medopal

+0

Hay una pregunta SO similar (mi google fu es deficiente) que trata de 'Set' vs' Collection' que tienen las mismas declaraciones de método, y se introdujeron en la misma versión (1.2). –

Respuesta

3

He estado investigando un poco más sobre esto y he descubierto que los métodos equals() y hashcode() también se sobrescriben.

Claramente, la única razón para esto puede ser agregar el javadoc - quizás esta es la razón por la cual también se sobrescribió iterator().

9

Compatibilidad con versiones anteriores. Iterable no se introdujo hasta 1,5 con el constructo for (Object o: iterable). Anteriormente, todas las colecciones tenían que proporcionar un medio para iterarlas.

+0

iterator() no existe solo para compatibilidad con versiones anteriores; A menudo es útil tener un identificador para el iterador directamente. – Adamski

+1

@Adamski, Dan pregunta por qué el método está declarado tanto en Collection como en Iterable, cuando Collection se extiende Iterable. Su punto parece estar dirigiéndose a "¿por qué hay un método .iterator(), period?" que nadie pregunta –

+0

Sí, lo siento; ¡Me di cuenta de eso y destrocé mi respuesta! – Adamski

6

Sospecho que fue solo para evitar la apariencia de eliminar un método desde el punto de vista de la documentación. Aunque javadoc es bueno, sería difícil darse cuenta/apreciar un método que se está moviendo de una interfaz a una super-interfaz.

Tenga en cuenta que lo mismo se hizo con Closeable, también introducido en 1.5.

Por lo que sé, no habría problemas de compatibilidad binaria con la eliminación del método de la clase Collection.

+0

De hecho, tampoco existe ningún problema de compatibilidad con la fuente. (Interfaz 'Colección', por cierto). Creo que necesitaría una función metalingüística, como la reflexión, para distinguir la diferencia en el tiempo de ejecución. –

3

Iterable se introdujo en 1.5. Como era parte de Collection from before 1.5, probablemente no lo eliminaron. Y como señaló el otro colaborador, tiene mejor JavaDoc.

Cuestiones relacionadas