Java 迭代器 - 尝试让 for every 循环工作

标签 java iterator foreach

所以我有一个 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/

相关文章:

java - 如何处理来自数据库的巨大结果集

vb.net - 对于每个循环迭代计数

php - `Undefined index` 错误提示 foreach 迭代数组中的变量值

c++ - 迭代 Boost fusion::vector

c# - 如何在不使用迭代器的情况下从列表中获取数据# C#

php - preg_match() 期望参数 2 是字符串,数组给定错误

java - 无法解析符号 EvaluatorUtil

java - java中如何使用CA证书连接数据库

java - 您知道的所有 Maven Archetype 目录的 URL 是什么?

c++ - 二叉搜索树中序迭代器 C++