【发布时间】:2013-05-31 20:59:54
【问题描述】:
我的问题是:是否可以仅通过实现Iterator 来通过容器,即不实现Iterable?
是否可以这样做:
//From somewhere
Container c = new Container();
//I add elements to the list in the c object.
for(String s : c){
//Warning: It is not applicable for this expression...
}
class Container implements Iterator<String>{
//Here I implement a single linked list
//Here I implement all of the methods of Iterator
}
【问题讨论】:
-
docs.oracle.com/javase/7/docs/api/java/util/Iterator.html -> 我看不出哪里需要 Iterable。如果您想将容器扔到 foreach 中,那么它确实是必需的。但这不是使用 Iterator 进行迭代的唯一方法。
-
你可以实现
Iterator所有你想要的。但是,使用 foreach 循环需要您实现Iterable。另请注意,如果您实现Iterator"only",您实际上只会在每个实例中循环一次。 -
@Fildor 我知道。但后来我得到答案,Iterable 需要能够为每个循环做一个。我知道:)
-
另外你需要从实现
Iterable<E>接口的类中调用Container对象,使用Iterable<E>#iterator()方法 -
在看到对您问题的修改后,它变得更加清晰。您真正要问的是您是否能够仅通过
Iterator使用enhanced for 循环。那么明确的答案是“不”。为什么?将问题直接交给功能的设计者。例如,乔什·布洛赫。
标签: java for-loop iterator iterable