java 泛型 通配符 Collection,实在不会了

[code="java"]
class CollectionGenFoo {
private T x;

public CollectionGenFoo(T x) {
    this.x = x;
}

public T getX() {
    return x;
}

public void setX(T x) {
    this.x = x;
}

public static void main(String[] args) {
    CollectionGenFoo<ArrayList> listFoo = null;
    listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
    //正确
    listFoo.setX(listFoo.getX());


    CollectionGenFoo<? extends Collection> listFoo2 = null;
    listFoo2 = new CollectionGenFoo<ArrayList>(new ArrayList());


    //错误
    //listFoo2.setX(listFoo2.getX());
    //也错
    //listFoo2.setX(new ArrayList<String>());


    //listFoo2.setX(/*这里怎么写*/);
}

}
[/code]

? extends XX 只能 把 ? 当成XX 来get
因为都是XX的子类
而不能把? 当成XX add 到T 中 或者说你的set
因为? 代表XX的所有子类

而 T 在实际用的时候 肯定是明确知道的