Java迭代器 - 试图让每个循环工作

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)

...多谢你们!

fhe*_*fhe 5

如果您的Tree<E>类也实现了Iterable<E>接口,那么foreach循环应该可以正常工作.您需要确保Iterator也返回泛型类型E.