Iterable<E>
находится в java.lang
, тогда как Iterator<E>
находится в java.util
. Есть ли веская причина для этого или это просто артефакт плохого дизайна?
Кажется странным, поскольку единственное, что подходит Iterable<E>
, - это предоставить Iterator<E>
.
РЕДАКТИРОВАТЬ. Одна из потенциальных причин - из-за недавно появившегося цикла for-each. Думаю, тогда мой вопрос был бы эквивалентен?
for(Object o : collection)
...
vs
for( Iterator iter = collection.iterator(); iter.hasNext(); ) {
o = iter.next();
...
Если они есть, то это все еще не объясняет, почему два класса находятся в разных пакетах, так как компилятор должен будет импортировать java.util
в любом случае, чтобы использовать конструкцию Iterator
.