如何在泛型类中使用Enum的静态函数?

时间:2017-12-05 23:14:40

标签: java generics enums

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类型,所以我不能使用属于所有枚举的静态函数吗?

1 个答案:

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