Почему существует метод 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.