日期:2014-05-20 浏览次数:20971 次
import typeinfo.pets.*;
import java.util.*;
public class CollectionSequence
extends AbstractCollection<Pet> { //问题1:这里AbstractCollection<Pet> 这里加一个类型参数有什么意义?
private Pet[] pets = Pets.createArray(8);
public int size() { return pets.length; }
public Iterator<Pet> iterator() {
return new Iterator<Pet>() {
private int index = 0;
public boolean hasNext() {
return index < pets.length;
}
public Pet next() { return pets[index++]; }
public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
public static void main(String[] args) {
CollectionSequence c = new CollectionSequence(); //问题2:这里的对象 C 怎么理解?是属于Collection 对象还是AbstractCollection?
InterfaceVsIterator.display(c); //关于这里的实现,我想不通,我把display()方法的代码贴在下面
InterfaceVsIterator.display(c.iterator()); //这个实现我明白
}
} /* Output:
0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx
0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx
*///:~
public static void display(Collection<Pet> pets) {
for(Pet p : pets)
System.out.print(p.id() + ":" + p + " ");
System.out.println();
}
//关于这里的实现,我想不通,我把display()方法的代码贴在下面
------解决方案--------------------
for(Pet p : pets)
内部处理的时候是得到Iterator,然后在hasNext ,next这样处理。
------解决方案--------------------
随便写个例子看一下bytecode就明白了。
------解决方案--------------------
1楼已经说的很清楚了,而你想不清楚的地方是for循环取出集合里面的所有对象,相当于迭代一次次的取是一样的