0
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

4 回答 4

4

你可以做的更紧凑:

for(String i:list){
}  

该语法仅适用于可迭代对象(和数组),而不适用于它们的迭代器(也不适用于枚举)。

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

也许尝试像 Google Guava 这样的库来获得一些更方便的方式来使用迭代器、集合和朋友。

于 2012-06-15T06:19:33.023 回答
2

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

于 2012-06-15T06:19:05.187 回答
2

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

迭代器是不可迭代的。

于 2012-06-15T06:20:04.017 回答
-1
    for(String i:list){
        //
    }
于 2012-06-15T06:19:13.503 回答