```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()); } } } ```