所以我有一个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());
My 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循环。
知道我做错了吗?
修改:
根据best answer(以及之后不久发布的another equally good answer),以下内容使其成功:
更改
public class Tree<E> implements java.lang.Iterable{
....
}
到
public class Tree<E> implements java.lang.Iterable<E>{
....
}
...谢谢你们!
答案 0 :(得分:5)
如果Tree<E>
类也实现Iterable<E>
接口,则foreach循环应该正常工作。您需要确保Iterator还返回通用类型E
。
答案 1 :(得分:4)
如果您希望它以通用方式与for循环一起使用,则Tree
必须实现Iterable<E>
(因此您的iterator()
方法必须返回Iterator<E>
)
答案 2 :(得分:0)
您粘贴的代码中的for循环:
第3。 for(String s:tree)
错误地将树数据结构的元素类型转换为字符串的集合(或数组)。
我怀疑它应该看起来像:
for (String s : tree.getNodes()){...}
其中getNodes返回字符串集合。
不能肯定地说,直到您粘贴更多代码。