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
答案 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){
//
}