Java 将类指定给泛型属性
使用通配符类只会导致警告。但这个方法有什么问题,我得到了编译器错误“…无法从类subclass转换到类”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 }
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
可以是超类的任何子类。