Java Doc
public interface Iterable
Implementing this interface allows an object to be the target of the enhanced for statement (sometimes called the “for-each loop” statement).
Since: 1.5
那么什么是 enhanced for statement 呢?查看 Java™ Language Specification,不做赘述,类似于下面的这种 for 语句。
for (T t : this)
action.accept(t);
那么我们要实现接口,具体需要实现什么方法函数呢?没错,就是Iterator<T> iterator()
这个方法。这一方法,Returns an iterator over elements of type T.
实现这一方法,需要返回一个Iterator<T>
的对象,Iterator<T>
同样是一个接口,我们创建一个相应的对象,就需要先实现这个接口类。这个接口类需要实现的方法有:
boolean hasNext();
Returns true if the iteration has more elements. (In other words, returns true if next() would return an element rather than throwing an exception.)
T next();
Returns the next element in the iteration.
根据这些已知,我们就可以开始实现这个接口了。
完整代码
import java.util.Arrays;
import java.util.Iterator;
public class ImplementIterable implements Iterable<String> {
private int size;
private int current;
private Object [] o;
ImplementIterable() {
size = 0;
o = new Object [1];
}
public void add(String s) {
if(size == o.length) {
o= Arrays.copyOf(o, o.length<<1);
}
o[size ++] = s;
}
@Override
public Iterator<String> iterator() {
class I implements Iterator<String> {
I() {
current = 0;
}
@Override
public boolean hasNext() {
if(current < size) {
return true;
}
return false;
}
@Override
public String next() {
return o[current ++].toString();
}
}
return new I();
}
public static void main(String[] args) {
ImplementIterable i = new ImplementIterable();
i.add("a");
i.add("b");
i.add("c");
for(String s : i) {
System.out.println(s);
}
}
}