我有以下内容:
public class Foo<T extends Grok> extends ArrayList<T> {
}
如何在运行时找到T代表的类名?例如,假设我这样分配:
Foo<Apple> foo = new Foo<Apple>();
有没有办法让 Apple 作为 Foo 的构造函数中使用的类名?:
public Foo() {
super();
String classname = this.getTypeClassName(); // "com.me.Apple"
}
我可以只添加一个方法来设置类名,但更愿意在内部获取它,这样用户就不必这样做了,
谢谢
最佳答案
由于类型删除(Java 泛型模型的缺陷之一),这在一般情况下是不可能的。如果向 foo
传递一个 T 的实例,它可以检查该实例的类型,但不能保证它就是 T 而不是派生类型。由于您正在尝试访问构造函数中的类型,此时它不可能持有这样的实例,因此您必须通过构造函数传入一个苹果。
关于java - 获取与 extends ArrayList<T> 一起使用的类型的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189557/