Java 泛型类的未检查类型转换?

Java 泛型类的未检查类型转换?,java,generics,enums,Java,Generics,Enums,我正在尝试编写一个方法,可以在运行时将字符串转换为通用枚举的枚举对象。我有一个方法签名: public static <T extends Enum<T>> Enum<T> foo(String string, Class<T> clazz) 公共静态枚举foo(字符串、类clazz) 但是,我从一个类调用它,该类的泛型类型参数没有显式扩展Enum。i、 e class bar<X> { private Class<X&g

我正在尝试编写一个方法,可以在运行时将字符串转换为通用枚举的枚举对象。我有一个方法签名:

public static <T extends Enum<T>> Enum<T> foo(String string, Class<T> clazz)
公共静态枚举foo(字符串、类clazz)
但是,我从一个类调用它,该类的泛型类型参数没有显式扩展Enum。i、 e

class bar<X> {
  private Class<X> clazz;
  if (XIsAnEnum()) {
    foo(string, clazz)
  }
}
类栏{
私人课堂;
if(XIsAnEnum()){
foo(弦乐,克拉兹)
}
}
这不会编译,因为尽管我从
XIsAnEnum
的逻辑中知道
X扩展了Enum
,但我没有在泛型类型参数定义中明确说明这一点,因此它不是有效的参数

有没有办法从
执行未经检查的强制转换,或者我是否需要专门为我想使用枚举的时候创建一个新类
bar2

foo("value", clazz.asSubclass(Enum.class));
这涉及实际验证
clazz
是否引用了
,该类是
Enum
的子类

不过,您在这里放弃了所有的通用验证。

您可以使用它来为您进行转换,如

foo("value", clazz.asSubclass(Enum.class));
这涉及实际验证
clazz
是否引用了
,该类是
Enum
的子类


不过,您在这里放弃了所有通用验证。

我觉得您缺少了一些代码。你所拥有的不会编译,因为你在一个方法中没有if语句。是的,实际上会有一些额外的代码,但这不会影响问题。字符串包含什么?如果它只是一个枚举常量的名称,您可以执行
MyEnum.valueOf(string)
来获取相应的
MyEnum
常量,您不需要编写此方法。string是常量的名称,但MyEnum是通用的X。我觉得您缺少一些代码。你所拥有的不会编译,因为你在一个方法中没有if语句。是的,实际上会有一些额外的代码,但这不会影响问题。字符串包含什么?如果它只是枚举常量的名称,则可以执行
MyEnum.valueOf(string)
以获取相应的
MyEnum
常量,而无需编写此方法。string是常量的名称,但MyEnum是泛型X。