java - 类型安全 : Unchecked cast between Class-Objects

标签 java generics class casting

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

基本上我有一个 Class 对象列表,现在我想获得其中一个实现特殊接口(interface)的子集,但生成的 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 - 类型安全 : Unchecked cast between Class-Objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/892368/

相关文章:

java - 如何在java中标记字符串时转义分隔符

java - 在实现类中缩小通用 super 接口(interface)的范围

Java不能在没有泛型的情况下在列表中添加对象

ios - 扩展中无法识别 Swift 类属性

python - 作用域静态确定动态使用是什么意思?

java - 当recyclerview的itemview进入屏幕区域时如何更新firebase中的子值?

java - Spring不加载静态内容

java - 没有交互式弹出窗口的 Jcraft jsch

java - 从 ITypeBinding 获取合成方法

c++ - 在 const 方法中使用引用