假设我们有一个具有两个子类A1,A2的类A. 假设我们有另一个类B,也有两个子类,B1的B2:如何推断泛型以避免未检查铸造
class B{
List<? extends A> myGenericList;
B(List<? extends A> myGenericList){
this.myGenericList = myGenericList;
}
public List<? extends A> getMyGenericList(){
return myGenericList;
}
}
class B1 extends B{
B1(List<A1> a1List){
super(a1List);
}
}
class B2 extends B{
B2(List<A2> a2List){
super(a2List);
}
}
现在,如果我们有一个类C1这样的:
class C1{
...
public void doSomethingWithB1(B1 b1){
List<A1> a1list = (List<A1>)b1.getMyGenericList();
}
...
}
我如何能实现类的getMyGenericList B所以我可以避免未经检查的铸造警告?
我想是这样的:
public <T extends A> List<T> getMyGenericList() {
return this.myGenericList;
}
但是编译器与cannot convert from List<capture#3-of ? extends A> to List<T>
抱怨有没有办法做到这一点?
在此先感谢。
'名单 extends A> a1list = b1.getMyGenericList:
现在,子类与具体参数
A1
定义();' –@RahulSharma注意到你不能用这个习惯用法将元素添加到列表中。 – Mena
或者使B类通用:'B类 { 列表 myGenericList; }; 'B1类扩展B ' –