我让仿制品再次混淆了......
在this question的帮助下,我编写了存储和检索枚举值的方法,而不是绑定到特定的枚举类:
public static void storeEnum(Enum<?> enumValue) {
// Store it somehow
}
public static <E extends Enum<E>> E getEnum(E defaultValue) {
String valueString = // get it somehow
try {
return (E) Enum.valueOf(defaultValue.getDeclaringClass(), valueString);
} catch (Exception e) {
return defaultValue;
}
}
但现在我不想再有任何默认值了,我希望null
以防万一!
首次尝试:
public static <E extends Enum<E>> E getEnum(Class<? extends Enum> enumClass) {
String valueString = // get it somehow
try {
return (E) Enum.valueOf(enumClass, valueString);
} catch (Exception e) {
return null;
}
}
这会编译,但是当我想要存储MyCoolEnum
时,行MyCoolEnum mci = getEnum(MyCoolEnum.class);
会中断(Maven)编译运行:incompatible types: inference variable E has incompatible upper bounds java.lang.Enum<E>,MyCoolEnum
。
当然,这来自?
。但是如何从班级中推断出类型呢?
(Class<E extends Enum> enumClass)
无效。(Class<Enum<E>> enumClass)
打破valueOf
(The inferred type Enum<E> is not a valid substitute for the bounded parameter <T extends Enum<T>>
)。答案 0 :(得分:3)
我无法重现您的第一个错误,但作为替代方案,您应该能够使用Class<E>
,即:
public static <E extends Enum<E>> E getEnum(Class<E> enumClass) {
String valueString = // get it somehow
try {
return Enum.valueOf(enumClass, valueString);
} catch (Exception e) {
return null;
}
}
(注意你也可以放弃演员表)