【发布时间】:2021-12-18 14:39:36
【问题描述】:
TestClass中有一个参数Class t。 t 不能分配给 ClassA.class?
puclic class TestClass<T extends ClassA>{
private Class<T> t;
public TestClass(Class<T> t){
//this.t = ClassA.class; // why not?
this.t = t;
}
}
但是,可以从外部导入。
public class Test{
public static void main(String[] args) {
TestClass tc = new TestClass(ClassA.class);//It's ok
}
}
希望也可以内部赋值!
【问题讨论】:
-
在
TestClass构造函数中,T是什么类型并不取决于你,所以你不能假设ClassA是合适的。在您的main中,它 取决于您,并且您使用的是原始类型,因此无论如何您都放弃了类型检查。 -
您正在使用自己的泛型类作为原始类型,因此完全禁用了它的泛型部分。你应该这样做
TestClass<ClassA> tc = new TestClass<>(ClassA.class);泛型类的要点是使用它们的人可以声明类型。你可以有一个ClassB extends ClassA,然后在创建你的Testclass 时使用泛型声明它的泛型类型必须是ClassBnew TestClass<ClassB>。由于this.t的实际类型是动态的,因此您不能简单地将其视为始终是ClassA,它也可以是扩展该类的任何内容。
标签: java class generics java-8