JAVA泛型通配符

一、通配符的上界
“?”就是通配符,而“? extends Animal”则表示通配符“?”的上界为Animal, 换句话说就是,“? extends Animal”可以代表Animal或其子类, 可代表不了Animal的父类(如Object),因为通配符的上界是Animal。

使用泛型的原因:List<Cat>并不是List <Anilmal> 的子类型;

    public void act(List<? extends Animal> list){
       // list.add(new Animal());  编译错误,真实类型可能是Animal中一个子类
       // list.add(new Cat());    错误
          list.add(null); //仅可以添加(add)null
    }

    public void testExtendAnimal(){
        Animal animal = new Animal();
        Cat cat = new Cat();

        ArrayList<Animal> animallist = new ArrayList<>();
        animallist.add(animal);
        animallist.add(cat);

        ArrayList<Cat> catlist = new ArrayList<>();
        //catlist.add(animal);  报错
        catlist.add(cat);

        act(animallist);
        act(catlist);  //入参可以是Animal的子类
    }

二、通配符的下界
既然有了通配符的上界,自然有着通配符的下界。可以如此定义通配符的下界 List<? super Bird>,其中”Bird“就是通配符的下界。注意:不能同时声明泛型通配符申明上界和下界.

三、无界通配符
知道了通配符的上界和下界,其实也等同于知道了无界通配符,不加任何修饰即可,单独一个“?”。如List<?>,“?”可以代表任意类型,“任意”也就是未知类型。

     ArrayList<Cat> catlist = new ArrayList<>();
     List<Object> list = catlist;  //报错
     List<?> list1 = catlist;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值