集合使用泛型通配符时,对象不能调用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本身。*/
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值