CS *_*ent 2 java foreach iterator
所以我有一个Tree<E>类,其中E是由树保存和组织的数据类型.我想像这样迭代树,或者以类似的方式迭代:
1. Tree<String> tree=new Tree<String>();
2. ...add some nodes...
3. for (String s : tree)
4. System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
但它在第3行给出了错误.
Incompatible types
required: java.lang.String
found: java.lang.Object
Run Code Online (Sandbox Code Playgroud)
然而,以下工作正常并且如预期的那样,执行树的正确有序遍历并按原样打印每个节点:
for (TreeIterator<String> i = tree.iterator(); i.hasNext(); )
System.out.println(i.next());
Run Code Online (Sandbox Code Playgroud)
我的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
}
....
}
Run Code Online (Sandbox Code Playgroud)
我的TreeIterator类看起来像这样:
public class TreeIterator<E> implements java.util.Iterator<E>{
public E next(){
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是我想让for (String s : tree)循环正常工作 - 任何想法?这一点的重点是设置一个干净的foreach循环用于我的程序,而不是使用那个丑陋的循环.
知道我做错了什么吗?
编辑:
根据最佳答案(以及不久后发布的另一个同样好的答案),以下内容使其成功:
更改
public class Tree<E> implements java.lang.Iterable{
....
}
Run Code Online (Sandbox Code Playgroud)
至
public class Tree<E> implements java.lang.Iterable<E>{
....
}
Run Code Online (Sandbox Code Playgroud)
...多谢你们!