【发布时间】:2010-03-28 18:31:29
【问题描述】:
所以我有一个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 循环。
知道我做错了什么吗?
编辑:
根据best answer(以及不久之后发布的another equally good answer),以下使其工作:
变化
public class Tree<E> implements java.lang.Iterable{
....
}
到
public class Tree<E> implements java.lang.Iterable<E>{
....
}
...谢谢大家!
【问题讨论】:
-
您的错误是您的迭代器返回
Object而不是String。 -
注意:我添加了一些额外的代码。另外,@Jordan:我的迭代器是指 next() 函数吗?现在,当我尝试将 next() 从返回 E 更改为返回 Object 时,它给了我一个错误并说要改回来。