我知道大家都知道generic。
悬赏解释下列变量的具体解释,40分只给一个最佳答案:)
Collection<Object>;
Collection;//raw type
Collection<?>
Collection<? extends Object>;
Collection<T>;

解决方案 »

  1.   

    1. Collection<Object>; collection of object. 里面元素的类型都是Object。
    比如:Collection<Object> myObjects = new ArrayList<Object>();你的意图应该是持有任何Object,比如String,Integer...或是Collection<Object>, Collection<String> ...
    所以你使用里面的元素也应该只是把他作为一个Object,不会对其类型转换。2. Collection, raw type collection. 没有类型安全保证,也没有任何泛型所带来的便利。
    比如:class Stamp {}
    class Coin {}
    ...
    Collection myStamps = new ArrayList();
    myStamps.add(new Stamp());
    myStamps.add(new Coin());// 不会报错for(Iterator i = myStampes.iterator(); i.hasNext(); ) {
       Stamp s = (Stamp)i.next(); //报错 ClassCastException
       //...
    }
    ...没有使用泛型,你本意是打算声明一个持有Stamp的Collection,却不小心放入了Coin,但编译器并不会报错,
    所以你也因此付出了代价(ClassCastException)3. Collection<?> collection of some type。
        你想用泛型,但是你不确定或者不关心实际类型参数是什么的时候,你就可以使用此种类型(无界通配符类型)。
        那Collection<?> 和 raw type Collection有什么不同呢?答案就是 泛型可以保证类型安全,但是raw type不能!
        Collection<?>,除了null,你不可能往里面添加任何其他类型的元素。4.Collection<? extends Object>; collection of some subtype of Object(小贴士:任何类型都是他本身的子类型)
       看代码:    class Container<Object> {
    public void addAll(Collection<Object> objects) {
        // some code here
            }
        }    public class Test {
        
         public static void main(String[] args) {
        Container<Object> container = new Container<Object>();

        Collection<Integer> integers = new ArrayList<Integer>();

        container.addAll(integers); // 报错, 泛型和数组不一样,泛型不是协变类型的
                                            // 比如: Object[] objs; Integer[] integers; ints 是
                                            // objs的子类型; 
                                            // Container<Object> objs; Collection<Integer> ints, ins
                                            // 可不是objs的子类型
                                             
    }    }
    }将代码修改成 
        class Container<Object> {
    public void addAll(Collection<? extends Object> objects) {
        // some code here
            }
        }    public class Test {
        
         public static void main(String[] args) {
        Container<Object> container = new Container<Object>();

        Collection<Integer> integers = new ArrayList<Integer>();

        container.addAll(integers); // 编译通过
                                             
    }    }
    }
    5. Collection<T> list of T
       T 是一个类型参数(形式类型参数),T代表你的Collection中元素的类型;   
        class Collection<T> {
    //.....
        }
       
       比如你是这样使用的
       
        Collection<String> strings = ....; // String 是 实际类型参数,
                                           // 说明你Collection中所有元素都是String类型的
        
       
      

  2.   

    参考 Effective Java (第二版)