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类型,因此我是否应该能够使用属于所有枚举的静态函数? 最佳答案
从您的评论中,我已经知道您想做什么。
在这种情况下,您需要传递枚举的类并调用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[]
,并在以后检索它们时使用未经检查的强制转换。