Итак, у меня есть класс Tree<E>
, где E
- это тип данных, хранящийся и организованный деревом. Я бы хотел перебрать дерево, как это, или так:
1. Tree<String> tree=new Tree<String>();
2. ...add some nodes...
3. for (String s : tree)
4. System.out.println(s);
Это дает мне ошибку в строке 3.
Incompatible types
required: java.lang.String
found: java.lang.Object
Следующее, однако, работает нормально и, как и ожидалось, выполняя правильный обход дерева в порядке и распечатывая каждый узел как следует:
for (TreeIterator<String> i = tree.iterator(); i.hasNext(); )
System.out.println(i.next());
Мой класс Tree выглядит так:
public class Tree<E> implements java.lang.Iterable{
...
public TreeIterator<E> iterator(){
return new TreeIterator<E>(root);//return an iterator for the root node
}
....
}
И мой класс TreeIterator выглядит так:
public class TreeIterator<E> implements java.util.Iterator<E>{
public E next(){
...
}
...
}
Но я хочу, чтобы петля for (String s : tree)
работала правильно - есть идеи? Смысл этого состоял в том, чтобы настроить чистый цикл foreach для использования в моей программе, а не использовать этот уродливый цикл for.
Есть идеи, что я делаю не так?
Редактировать
В соответствии с лучшим ответом (и другим столь же хорошим ответом , который был опубликован вскоре после этого), следующее заставило его работать:
Изменение
public class Tree<E> implements java.lang.Iterable{
....
}
до
public class Tree<E> implements java.lang.Iterable<E>{
....
}
... Спасибо, ребята!