Java 将类指定给泛型属性

Java 将类指定给泛型属性,java,generics,Java,Generics,使用通配符类只会导致警告。但这个方法有什么问题,我得到了编译器错误“…无法从类subclass转换到类” public static <T extends Superclass> void createInstance(Class<T> param) { if (param == null) { if (whatever) { param = Subclass1.class; // Comp-Error }

使用通配符类只会导致警告。但这个方法有什么问题,我得到了编译器错误“…无法从类subclass转换到类”

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
        }
    }
公共静态void createInstance(类参数){
if(param==null){
如果(无论什么){
param=子类1.class;//编译错误
}否则如果(无论什么){
param=子类2.class;//编译错误
}否则{
//错误
}
}
}

编辑:
可以肯定的是,子类1和子类2正在扩展超类。

T
由编译器根据方法调用进行选择(例如
ContainingClass.createInstance(subclass.class)
表示
T=class
)。不保证
子类1.类
(a
)或
子类2.类
(a
)可分配给
。事实上,没有类
T
使得两者都是可赋值的。

当调用方法
T
时,应该是“超类
的某个特定子类(在编译时未知)”。编译器无法知道无论
t
将是什么,都将与
子类1
子类2
兼容@khelwood:我添加了一个编辑。你的答案仍然正确吗?我相信,编译器知道,“类subclass 1扩展了超类{}”。如果编译器确实知道
T
subclass 1
,则只能将
class
变量分配给
subclass 1.class
。但是它不是,因为
t
可以是
超类的任何子类。