所以我有一個Tree<E>
類,其中E
是由樹保存和組織的數據類型。我想像這樣遍歷Tree,或者以類似於此的方式:Java迭代器 - 試圖讓每個循環工作
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());
我的樹類看起來是這樣的:
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循環,而不是使用那個醜陋的循環。
任何想法我做錯了什麼?
編輯:
按(這是後不久發佈和another equally good answer)的best answer,下面做它的工作:
更改
public class Tree<E> implements java.lang.Iterable{
....
}
到
public class Tree<E> implements java.lang.Iterable<E>{
....
}
......謝謝你們!
你的錯誤是你的迭代器返回一個'Object'而不是'String'。 – 2010-03-28 18:35:35
注:我已經添加了一些額外的代碼。 另外,@Jordan:我的迭代器是否意味着next()函數?現在,當我嘗試改變next()從返回一個E返回一個Object時,它給了我一個錯誤,並說要將它改回來。 – 2010-03-28 18:40:28