为什么我不能这样使用Iterator?

时间:2012-06-15 06:16:17

标签: java

Iterator<String> iterator=...

//right way
for (Iterator<String> i = iterator; i.hasNext(); ){
    System.out.println(i.next());
}

//why can't?
for(String i:iterator){         
}

参考:

http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

4 个答案:

答案 0 :(得分:4)

你可以做得更紧凑:

for(String i:list){
}  

语法仅适用于Iterables(和数组),不适用于其迭代器(也不适用于Enumerations)。

为什么不呢?我不知道......对于“罕见”的情况,可能过于复杂/努力(在编译器实现中)。或者会导致麻烦的边缘情况(例如Iterable也是迭代器,我认为有些人制造这样的野兽)。

也许尝试像Google Guava这样的库,以便更方便地使用迭代器,收藏夹和朋友。

答案 1 :(得分:2)

编译器检查for的语法,并要求冒号后面的表达式返回一个实现Iterable接口的对象。迭代器没有实现它。

答案 2 :(得分:2)

您只能对实现Iterable接口的对象使用for循环语法。

迭代器不可迭代。

答案 3 :(得分:-1)

    for(String i:list){
        //
    }