【发布时间】:2009-05-21 11:01:11
【问题描述】:
我对泛型等很满意,但在这种特殊情况下,我有一个关于“类型安全:从 .. 到 .. 的未经检查的强制转换”警告的问题。
基本上我有一个 Class 对象列表,现在我想获得其中的一个子集来实现一个特殊的接口,但生成的 List 也应该有那个特殊的类型:
...
private List<Class<?>> classes;
public List<Class<? extends Concrete>> getConcreteClasses() {
List<Class<? extends Concrete>> concreteClasses = new LinkedList<Class<? extends Concrete>>();
for (Class<?> clazz: this.classes) {
for (Class<?> i : clazz.getInterfaces()) {
if (i.equals(Concrete.class)) {
concreteClasses.add((Class<? extends Concrete>) clazz);
}
}
}
return concreteClasses;
}
警告当然与类型转换有关:
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
我可以摆脱类型转换还是应该使用@SuppressWarnings("unchecked") 来抑制警告?
感谢您的回答!
PS:环境是Java 6。
解决方案:代替
concreteClasses.add((Class<? extends Concrete>) clazz);
使用
concreteClasses.add(clazz.asSubclass(Concrete.class));
【问题讨论】:
-
很好的答案,在这里救了我的命。
标签: java generics class casting