关于Java6 泛型的一点讨论

 

在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()方法还是无法正常使用``

 

转载于:https://my.oschina.net/piorcn/blog/310548

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值