日期:2014-05-20 浏览次数:20770 次
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循环取出集合里面的所有对象,相当于迭代一次次的取是一样的