Почему есть метод iterator () на java.util.Collection - PullRequest
15 голосов
/ 18 января 2010

Почему существует метод iterator (), определенный в интерфейсе java.util.Collection, когда он уже расширяет java.util.Iterable, для которого определен этот метод.

Я думаю о какой-то обратной совместимости или возможности написать какой-нибудь JavaDoc для метода на уровне коллекции.

Есть еще идеи?

Ответы [ 4 ]

9 голосов
/ 18 января 2010

Обратная совместимость. Итерируемый не был представлен до 1.5 с конструкцией for (Object o: iterable). Ранее все коллекции должны были предоставлять средства для их итерации.

6 голосов
/ 18 января 2010

Я подозреваю, что это было просто, чтобы избежать появления метода удаления с точки зрения документации. Хотя javadoc хорош, было бы трудно заметить / оценить метод, перемещаемый из одного интерфейса в суперинтерфейс.

Обратите внимание, что то же самое было сделано с Closeable, также представленным в 1.5.

Насколько мне известно, при удалении метода из класса Collection не было бы проблем с двоичной совместимостью.

3 голосов
/ 18 января 2010

Я провел еще несколько исследований по этому вопросу и обнаружил, что методы equals () и hashcode () также перезаписываются.

Очевидно, что единственной причиной этого может быть добавление javadoc - может быть, поэтому итератор () также был перезаписан.

3 голосов
/ 18 января 2010

Итерируемый был введен в 1.5. Так как это было частью Коллекции до 1.5, они, вероятно, просто не удалили ее И, как отметил другой участник, у него лучше JavaDoc.

...