将通用类型 T 转换为 Class<T> 类型

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并以这种方式保存类型。


1
你能展示一下你的代码吗?你想在哪里展示它,为什么要这样做? - Rohit Jain
欢迎来到类型擦除的可怕世界。那通常是不可能的。 - SLaks
2个回答

5
你在运行时不知道 T 的类型(因为类型擦除的原因)。
基本上,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>


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);
    }
}

谢谢。我知道这个,只是想知道是否有更优雅的方法来做这个(请参见背景信息)。无论如何还是谢谢。 - Frithjof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接