日期:2014-05-20  浏览次数:20724 次

有段代码看不懂,劳烦大家帮忙解答下~~
代码:
Java code
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
*///:~

【display方法】
Java code
public static void display(Collection<Pet> pets) {
    for(Pet p : pets)
      System.out.print(p.id() + ":" + p + " ");
    System.out.println();
  }


最后还有一段话不理解:(书上原话)
  “当你要实现一个不是Collection的外部类时(这句话脑子完全没概念),由于让他去实现Collection接口可能非常困难或麻烦,因此使用Iterator就会变得非常吸引人。”


--------------------------------
以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用
楼主【llm0528】截止到2008-08-04 15:19:12的历史汇总数据(不包括此帖):
发帖的总数量:73 发帖的总分数:1620 每贴平均分数:22  
回帖的总数量:66 得分贴总数量:2 回帖的得分率:3%  
结贴的总数量:73 结贴的总分数:1620  
无满意结贴数:0 无满意结贴分:0  
未结的帖子数:0 未结的总分数:0  
结贴的百分比:100.00% 结分的百分比:100.00%  
无满意结贴率:0.00 % 无满意结分率:0.00 %  
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=llm0528

------解决方案--------------------
问题1:这里AbstractCollection<Pet> 这里加一个类型参数有什么意义?
指定集合里的对象的类型是Pet

问题2:这里的对象 C 怎么理解?是属于Collection 对象还是AbstractCollection?
是CollectionSequence 

关于这里的实现,我想不通,我把display()方法的代码贴在下面
我认为这个和下面一个是一样的


------解决方案--------------------
问题1: Pet 是java的范型说明这个 CollectionSequence 只能加载 Pet类型
问题2:c 是由 CollectionSequence 创建的所以只属于 CollectionSequence 类型,
要是由AbstractCollection&lt;Pet&gt; 创建的就 属于 AbstractCollection&lt;Pet&gt;类型。

我只知道这两个,其他的也说不清楚。还希望有人指点。

和楼主一起学习。

------解决方案--------------------
lz看的是外文翻译过来的吧
------解决方案--------------------
Java code
//关于这里的实现,我想不通,我把display()方法的代码贴在下面

------解决方案--------------------
for(Pet p : pets)
内部处理的时候是得到Iterator,然后在hasNext ,next这样处理。
------解决方案--------------------
随便写个例子看一下bytecode就明白了。
------解决方案--------------------
1楼已经说的很清楚了,而你想不清楚的地方是for循环取出集合里面的所有对象,相当于迭代一次次的取是一样的