以下是源代码:
package com.zz.jdk5;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CommonGeneric<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public static void main(String[] args) {
CommonGeneric<? extends List> commonGeneric =new CommonGeneric<List>();
commonGeneric = new CommonGeneric<ArrayList>();
ArrayList al = new ArrayList();
//下面就是错误产生行
//commonGeneric.setT(al);
commonGeneric = new CommonGeneric<LinkedList>();
LinkedList ll = new LinkedList();
}
}
问题解释:
使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來*取得*所参考实例的信息,或者是*移除*某些信息,但不能*增加*它的信息,因为只知道当中放置的是SomeClass的子类,但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。