public class EnumFromInt<TEnum extends Enum<TEnum>> {
private static TEnum[] _values;
private static TEnum[] GetValues() {
if (_values != null)
{
return _values;
}
_values = TEnum.values();
return _values;
}
}
上面,有两个“无法从静态上下文引用”的实例。它们似乎是分开的,所以我会将它们视为不同的问题。我想了解两者。
TEnum[]
- 为什么?它是TEnum的任何类型的数组。 (嗯,这就是我想要的)TEnum.values()
- TEnum被声明为Enum类型,所以我不能使用属于所有枚举的静态函数吗?答案 0 :(得分:1)
根据你的评论,我知道你想做什么。
在这种情况下,您需要传递enum的课程并致电getEnumConstants
:
class EnumFromInt {
private static final Map<Class<?>, Object[]> _values = new HashMap<>();
@SuppressWarnings("unchecked")
private static <TEnum extends Enum<TEnum>> TEnum[] getValues(Class<TEnum> cls) {
return (TEnum[]) _values.computeIfAbsent(cls, Class::getEnumConstants);
}
}
您还必须使用Map
,因为字段只能存储1个值数组。没有办法强制键的类型对应于值的类型,因此您需要将值数组存储为Object[]
,并在检索它们时使用未经检查的转换。