如何找到Java泛型类型的类对象?

如何找到Java泛型类型的类对象?,java,generics,enums,Java,Generics,Enums,假设我有一个泛型类型p,它是一个枚举,即,我想从字符串中获取枚举值,例如: String foo = "foo"; P fooEnum = Enum.valueOf(P.class, foo); 这将导致编译错误,因为p.class无效。那么我该怎么做才能使上述代码正常工作呢?在Java中是没有办法的。泛型类型被擦除并转换为字节码中的对象。泛型类型('P'在您的例子中)不是一个真正的类,只是一个占位符 请看一看关于类型擦除的大量答案。Java使用称为类型擦除的东西实现泛型。这意味着实际的泛型参

假设我有一个泛型类型
p
,它是一个枚举,即

,我想从字符串中获取枚举值,例如:

String foo = "foo";
P fooEnum = Enum.valueOf(P.class, foo);

这将导致编译错误,因为
p.class
无效。那么我该怎么做才能使上述代码正常工作呢?

在Java中是没有办法的。泛型类型被擦除并转换为字节码中的
对象
。泛型类型('P'在您的例子中)不是一个真正的类,只是一个占位符


请看一看关于类型擦除的大量答案。

Java使用称为类型擦除的东西实现泛型。这意味着实际的泛型参数在运行时被擦除。因此,您无法从泛型类型参数推断类型信息。

您必须在某个地方有此泛型类型的运行时实例,以便您可以通过获取声明类。假设您在某个地方声明了
P
作为方法参数,下面是一个示例

例如

publicstaticpvalueof(pp,字符串名){
返回Enum.valueOf(p.getDeclaringClass(),name);
}

您可以在运行时让调用者或某个配置提供程序获取它。例如,您可以使用Spring或其他配置

class Converter<P extends Enum> {
    private Class<P> type;

    //setter and getter

    public P valueOf(String name) {
        return Enum.valueOf(type, name);
    }
}
类转换器{
私人类

型; //接二连三 公共P值(字符串名称){ 返回Enum.valueOf(类型、名称); } }


然后在需要的地方配置它。

不,没有运行时实例p。。。如果p存在,我不需要运行该行。我只有枚举名,希望从该字符串中获取p。如果没有运行时实例,则无法显示泛型类型的运行时类。Java中的泛型不像C中那样具体化。
class Converter<P extends Enum> {
    private Class<P> type;

    //setter and getter

    public P valueOf(String name) {
        return Enum.valueOf(type, name);
    }
}