快捷搜索: 王者荣耀 脱发

集合使用泛型通配符时,对象不能调用add方法

class Animal {
          
   }
class Dog extends Animal {
          
   }
class Cat extends Animal {
          
   }
class CollectionDemo {
          
   
    public static void main(String[] args) {
          
   
        //Collection<Object> c1 = new ArrayList<Object>();
        //Collection<Object> c2 = new ArrayList<Animal>();
        //Collection<?> c2 = new ArrayList<Animal>();
        /*c2.add(new Animal());
        add
                (capture<?>)
        in Collection cannot be applied
                to
        (jdk5.generic.Animal)*/
        //不能添加元素,不然可能引发错误


        /*
        * 上限通配泛型
        * 可以添加T类型对象或者T子类类型对象
        *
        * */
        /*Collection<?> c1 = new ArrayList<Animal>();;
        c1.add(new Animal());
        c1.add(new Dog());
        //在泛型通配符中,不能给集合对象c1添加元素,因为如果添加成功,可能出现添加元素的类型与c1中元素的实际类型不匹配的问题

        Collection<? extends Animal> c2 = new ArrayList<Dog>();;
        c2.add(new Animal());
        c2.add(new Dog());
        //在下限泛型通配符中,不能给集合对象c2添加元素,因为如果添加成功,可能出现添加元素的类型与c1中元素的实际类型不匹配的问题,比如我添加Cat,也是Animal的子类,但却不是Dog类
        Collection<? super Animal> c3 = new ArrayList<Animal>();;
        c3.add(new Animal());
        c3.add(new Dog());
        c3.add(new Object());
        //在下限泛型通配符中,可以给集合对象c3添加元素,但只能添加Animal的子类或者Animal本身。*/
    }
}
经验分享 程序员 微信小程序 职场和发展