【发布时间】:2012-07-24 18:40:53
【问题描述】:
我创建了以下测试类:
public class GenericTest {
public static class A implements Serializable {
}
public static class B implements Serializable {
}
public static void main(String[] args) {
// Error: Type mismatch: cannot convert from List<capture#1-of ? extends Serializable> to List<GenericTest.A>
//List<A> aList = getInfo().get("A");
//List<B> BList = getInfo().get("B");
// Warning: Type safety: Unchecked cast from List<capture#1-of ? extends Serializable> to List<GenericTest.A>
List<A> aList = (List<A>)getInfo().get("A");
List<B> BList = (List<B>)getInfo().get("B");
}
public static Map<String, List<? extends Serializable>> getInfo() {
Map<String, List<? extends Serializable>> infoMap = new HashMap<String, List<? extends Serializable>>();
List<A> aList = new ArrayList<A>();
List<B> bList = new ArrayList<B>();
try {
aList.add(new A());
infoMap.put("A", aList);
bList.add(new B());
infoMap.put("B", bList);
}
catch(Exception e) {
e.printStackTrace();
}
return infoMap;
}
}
有没有更好的方法来避免投射和抑制未经检查的警告?有人告诉我,使用强制转换几乎一开始就违背了使用泛型的目的。这样做有问题,还是“更安全”的方法?
【问题讨论】:
-
您不应该在您的方法的返回类型中使用通配符
?。这意味着你的方法返回了一些未知的东西。
标签: java list generics casting parameterized