我正在尝试编写一种方法,可以在运行时从字符串转换为枚举对象,以获取通用枚举。我有一个方法签名:
public static <T extends Enum<T>> Enum<T> foo(String string, Class<T> clazz)
但是,我从其泛型类型参数未显式扩展Enum的类中调用它。即
class bar<X> {
private Class<X> clazz;
if (XIsAnEnum()) {
foo(string, clazz)
}
}
这不会编译,因为即使我从
XIsAnEnum
的逻辑知道X extends Enum<X>
,我也没有在通用类型参数定义中明确声明它,所以它不是有效的参数。有没有办法从
Class<X>
到Class<X extends Enum<X>>
进行未经检查的转换,还是我想专门使用枚举时必须专门创建一个新的类bar2<X extends Enum<X>>
? 最佳答案
您可以使用Class#asSubclass(Class)
为您进行转换,例如
foo("value", clazz.asSubclass(Enum.class));
这涉及到实际验证,即
clazz
引用的是Class
的子类Enum
。不过,您在这里扔掉了所有通用验证。
关于java - 泛型类的未经检查的类型转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34187490/