Java中<?>,<? extends E>,<? super E>

  在集合中,经常可看到<?>,<? extends E>,<? super E>,它们都是属于泛型;

 

  <?>:

   是泛型通配符,任意类型,如果没有明确,那么就是Object以及任意类型的Java类;

  

  <? extends E>:

   向下限定,E及其子类,表示包括E在内的任何子类;

 

  <? super E>:

   向上限定,E及其父类,表示包括E在内的任何父类;

 

  示例如下:

class Animal {}

class Dog extends Animal {}

class Cat extends Animal {}

public class CollectionDemo {

        public static void main(String[] args) {
            Collection<?> c1 = new ArrayList<Animal>();
            Collection<?> c2 = new ArrayList<Dog>();
            Collection<?> c3 = new ArrayList<Cat>();
            Collection<?> c4 = new ArrayList<Object>();

            Collection<? extends Animal> c5 = new ArrayList<Animal>();
            Collection<? extends Animal> c6 = new ArrayList<Dog>();
            Collection<? extends Animal> c7 = new ArrayList<Cat>();
            // Collection<? extends Animal> c8 = new ArrayList<Object>();

            Collection<? super Animal> c9 = new ArrayList<Animal>();
            // Collection<? super Animal> c10 = new ArrayList<Dog>();
            // Collection<? super Animal> c11 = new ArrayList<Cat>();
            Collection<? super Animal> c12 = new ArrayList<Object>();
        }

}

    在上述代码中,c1,c2,c3,c4中<?>代表任意类型,c5,c6,c7中<? extends Animal>代表包括Animal在内的任何子类;而c8中,Object是所有类的基类,Animal是它的子类,<? extends Animal>只包含Animal及其子类,所以这里会编译报错;c9,c10,c11,c12中<? super Animal>表示包含Animal及其父类,c10,c11这里会编译报错;

 

转载于:https://www.cnblogs.com/coder-zyc/p/10387625.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值