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