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[]
并在稍后检索它们时使用未经检查的转换。
关于java - 如何在泛型类中使用 Enum 的静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664246/