Почему существует метод iterator() на java.util.Collection

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

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

Любые другие идеи?

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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