将类分配给通用属性

时间:2016-06-23 07:13:55

标签: java generics

使用通配符类只会导致警告。但是这个方法出了什么问题,我得到编译器错误' ...无法从类SubclassX转换为Class'

public static <T extends Superclass> void createInstance(Class<T> param) {
    if (param == null) {
        if (whatever) {
            param = Subclass1.class; // Comp-Error
        } else if (whatever2) {
            param = Subclass2.class; // Comp-Error
        } else {
            // Error
        }
    }

}

编辑: 可以肯定的是,Subclass1和Subclass2正在扩展Superclass。

1 个答案:

答案 0 :(得分:0)

编译器根据方法调用选择

T(例如ContainingClass.createInstance(Subclass2.class)表示T = Class<Subclass1>)。不保证Subclass1.classClass<Subclass1>)或Subclass2.class(a Class<Subclass2>)可分配给Class<T>。事实上,没有类T这样两者都可以分配。