Java: почему Collection.addAll не может принимать Iterables?
Интересно, почему метод Collection.addAll() принимает только другие Collection, но не Iterable s. Почему это?
Любой аналогичный метод для Iterable s?
Ответ 1
Предположительно, потому что интерфейс Collection был введен в Java 1.2, тогда как Iterable появился только в 1.5, и изменение интерфейса приведет к поломке всех существующих реализаций.
Ответ 2
Если вы сомневаетесь, всегда проверяйте Guava (или Commons):
В основном потому, что Iterable никогда не может закончиться (то есть hasNext() вернуть true навсегда).
Кроме того, чтобы сохранить конгруэнтность, вы можете подумать, что Collection может добавить все элементы другой коллекции, но Iterable не обязательно представляет собой набор (это может быть что угодно, например, a ResultSet wrapper для экземпляр).
Ответ 5
В базовом JDK есть довольно много вещей, которые не так хорошо работают с простыми итерациями, как могли бы. Я бы порекомендовал использовать гуаву, чтобы преодолеть многие из этих недостатков.