4

如何将泛型类型T转换为对象Class<T>

喜欢Class<T> T.classClass<T> T.getClass()不工作的东西,因为T没有变量。

一个函数应该是这样的:

public Class<T> getType() {
 return // Class of T
}

背景信息:我有一些课程Class1<T>,,Class2<T>......所有extend ParentClass<T>ParentClass有功能getType()。我正在寻找一种更优雅的方式来获取类型,然后只是创建一个变量Class<?> type并以这种方式保存类型。

4

2 回答 2

5

您在运行时不知道T(因为Type erasure)。

基本上,MyWonderfulClass<String>MyWonderfulClass<Object>在运行时变为,因此您没有任何机会检索它,除非您直接在构造函数或 setter 中给出类:

//class is a reserved keyword so I call it clazz instead.
public MyClass(Class<T> clazz) {
  this.clazz = clazz;
}

public Class<T> getType() {
  return this.clazz;
}

您还可以强制您的子类实现getType() : Class<T>.

于 2013-09-11T15:36:23.160 回答
0

你可以这样做:

public class Parent<T> {
    private final Class<T> clazz;

    public Parent(Class<T> clazz) {
        this.clazz = clazz;
    }

    public Class<T> getType() {
        return clazz;
    }
}

public class Foo<T> extends Parent {

    public Foo(Class<T> clazz) {
        super(clazz);
    }
}
于 2013-09-11T15:35:34.913 回答