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[],并在以后检索它们时使用未经检查的强制转换。

10-01 17:57