zoukankan      html  css  js  c++  java
  • Java中的逆变与协变 很直接不饶弯的讲出来了

    ```java
    协变
     extends只能new 辈分比自己低的家伙
         List<? extends Number> list001 = new ArrayList<Integer>();
         初始化可以这样但不能添加非空元素
         下面演示如何接收
     int page=1;
            int rows=10;
            int limit=page*rows;
            int start=(page-1)*rows+1;
            List<Integer> list = new ArrayList<>();
            list.add(3);
            list.add(4);
            test2(list);
            return;
            
       public void test2(List<? extends  Number> arr){
             int i=3;
        }  
    ```    
    
    ```java
    逆变
      List<? super Number> list0011 = new ArrayList<Number>();//可以
            List<? super Number> list002 = new ArrayList<Object>();//可以
            List<? super Number> list00111 = new ArrayList<Integer>();//不可
    super超类 只能new 辈分比自己高与等于的家伙   
    
            list002.add(new Integer(1));
    因为指明辈分等于或高于Number        
    自然可以接收一切Number的子类
    
    
    ```
    逆变协变我用辈分说明,压栈和出栈也可
    ```java
      java.util.Collections的copy方法(JDK1.7)完美地诠释了PECS:
    public static <T> void copy(List<? super T> dest, List<? extends T> src) {
        int srcSize = src.size();
        if (srcSize > dest.size())
            throw new IndexOutOfBoundsException("Source does not fit in dest");
    
        if (srcSize < COPY_THRESHOLD ||
            (src instanceof RandomAccess && dest instanceof RandomAccess)) {
            for (int i=0; i<srcSize; i++)
                dest.set(i, src.get(i));
        } else {
            ListIterator<? super T> di=dest.listIterator();
            ListIterator<? extends T> si=src.listIterator();
            for (int i=0; i<srcSize; i++) {
                di.next();
                di.set(si.next());
            }
        }
    }
    ```
  • 相关阅读:
    Struts2 动态方法调用
    Struts2 NameSpace空间的使用
    Struts2基本结构
    Android TextView Button按钮 属性
    【转】vue 手动挂载$mount() 获取 $el
    【转】逻辑架构和物理架构
    EntityFramework Code First 构建外键关系,数据库不生成外键约束
    HTML Document 头
    CSS 浏览器兼容
    PageMethods
  • 原文地址:https://www.cnblogs.com/kexb/p/10124412.html
Copyright © 2011-2022 走看看