Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类型安全性:未选中在类对象之间强制转换_Java_Generics_Class_Casting - Fatal编程技术网

Java 类型安全性:未选中在类对象之间强制转换

Java 类型安全性:未选中在类对象之间强制转换,java,generics,class,casting,Java,Generics,Class,Casting,我对泛型之类的东西很熟悉,但在这个特殊情况下,我有一个关于“类型安全:未经检查的强制转换从..到..”警告的问题 基本上,我有一个类对象列表,现在我想得到其中的一个子集,它实现了一个特殊的接口,但结果列表也应该有这种特殊类型: ... private List<Class<?>> classes; public List<Class<? extends Concrete>> getConcreteClasses() { 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;

}

您可以取消显示警告,因为您确信强制转换可以工作,因为您添加的所有类都实现了具体的接口…

谢谢!事实上,我已经在另一段代码中使用了asSubclass()。ooops:DDon如果您需要使用反射来抑制其他地方的警告,请不要感到惊讶。(一如既往,反思是邪恶的。)回答得好,救了我一命。
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
concreteClasses.add((Class<? extends Concrete>) clazz);
concreteClasses.add(clazz.asSubclass(Concrete.class));