所以我有一个 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());
我的树类如下所示:
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 循环。
知道我做错了什么吗?
<小时/>编辑:
根据 best answer (以及不久后发布的another equally good answer),以下内容使它起作用:
改变
public class Tree<E> implements java.lang.Iterable{
....
}
到
public class Tree<E> implements java.lang.Iterable<E>{
....
}
...谢谢大家!
最佳答案
如果你的 Tree<E>
则 foreach 循环应该工作正常类还实现了 Iterable<E>
界面。您需要确保您的迭代器也返回泛型类型 E
.
关于Java 迭代器 - 尝试让 for every 循环工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534020/