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