将泛型类型T转换为Class <t> </t>

时间:2013-09-11 15:22:05

标签: java class object types casting

如何将通用类型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并以这种方式保存类型。

2 个答案:

答案 0 :(得分:4)

您在运行时不知道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>

答案 1 :(得分: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);
    }
}