在JAVA5中加入了泛型,以在编译时就可以控制类型```
程序代码
package cn.pior.jdk5Test;
import java.util.List;
public class genericTest<T1 extends List<String>> {
private T1 a;
public T1 getA() {
return a;
}
public void setA(T1 a) {
this.a = a;
}
public genericTest(T1 t) {
setA(t);
}
public genericTest() {
setA(null);
}
}
程序代码
package cn.pior.jdk5Test;
import java.util.AbstractList;
public class genericChildTest<T extends AbstractList<String>> extends genericTest<T> {
}
上面是两个泛型类的定义``
genericTest定义泛类型只能为List<String>类或继承了List<String>的子类``
genericChildTest又进一步定义了泛类型只能为AbstractList<String>类或继承了AbstractList<String>的子类``
下面是一段应用的例子`:
程序代码
genericChildTest<? extends ArrayList<String>> g1 = null;
genericChildTest<ArrayList<String>> g2 = new genericChildTest<ArrayList<String>>();
ArrayList<String> al = new ArrayList<String>();
al.add("e");
g2.setA(al);
g1= g2;
g1.setA(al);
在最后的一句 g1.setA(al);``在编译时会报错如下:
程序代码
The method setA(capture#2-of ? extends ArrayList<String>) in the type genericTest<capture#2-of ? extends ArrayList<String>> is not applicable for the arguments (ArrayList<String>)
也就是说``在定义 genericChildTest<? extends ArrayList<String>> g1 = null;时`虽然限定了这泛类型必须是 ArrayList<String>或其子类`但`还是无法确定到底是哪个子类```所以这里的setA()方法还是无法正常使用``