zoukankan      html  css  js  c++  java
  • 泛型通配符

    1.通配符

    泛型通配符有两种

    上界通配符<? extends xx> 

    下界通配符<? super xx>

    2.举例说明

    先上代码吧

    class A{
        
    }
    class B extends A{
        
    }
    class C extends A{
        
    }
    public class NonCovariantGenerics {
        public static void main(String[] args) {
            List<? extends A> list1= new ArrayList<B>();
            List<? super B> list2= new ArrayList<B>();
            //list1.add(new B()); 编译出错
            list2.add(new B());
        }
        public static <T>  void f1(List<T> list,T item) {
            list.add(item);
        }
    
    }

    结构很简单的类,B和C都继承基类A.

    <? extends A>的意思表示某一个类,这个类是继承自A,确定了上界,但是问题就来了,继承A的类有B和C,编译器无法确定具体的子类型,所以编译出错.

    <? super B>表示某一个类,这个类是B的父类(超类),确定了下界,也就是说,<? super B>表示B,A以及B的其他父类(java只有单继承,这里只是举例),虽然不确定是具体的哪一个父类,但是<? super B> 包含了B,所以编译不出错.

    3.总结

    读取用 extends

    写入用super

    (拓展)PESC 原则(Producer Extends Consumer Super)

      

      

  • 相关阅读:
    numpy 广播
    jupyter notebook
    OpenCV ——双线性插值(Bilinear interpolation)
    历届试题 大臣的旅费
    历届试题 幸运数
    数字图像处理_读写和显示图像
    历届试题 买不到的数目
    历届试题 连号区间数
    历届试题 翻硬币
    历届试题 剪格子
  • 原文地址:https://www.cnblogs.com/lishuaiqi/p/10328202.html
Copyright © 2011-2022 走看看