类型安全:在类对象之间取消选中

时间:2009-05-21 11:01:12

标签: java generics class casting

我对泛型等很满意,但在这个特殊情况下,我有一个关于“类型安全:未经检查从...转换为...”警告的问题。

基本上我有一个Class对象列表,现在我想得到一些实现特殊接口的子集,但结果List也应该有那个特殊的Type:

...
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(“未选中”)来抑制警告?

感谢您的回答!

PS:环境是Java 6。

解决方案:而不是

concreteClasses.add((Class<? extends Concrete>) clazz);

使用

concreteClasses.add(clazz.asSubclass(Concrete.class));

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:0)

您可以取消警告,因为您确定演员阵容将起作用,因为您添加的所有类都实现了Concrete接口...