如何找到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);
}
}