Java 如何使用Enum';泛型类中的静态函数是什么? 公共类EnumFromInt{ 专用静态TEnum[]_值; 私有静态TEnum[]GetValues(){ 如果(_值!=null) { 返回_值; } _value=TEnum.values(); 返回_值; } }

Java 如何使用Enum';泛型类中的静态函数是什么? 公共类EnumFromInt{ 专用静态TEnum[]_值; 私有静态TEnum[]GetValues(){ 如果(_值!=null) { 返回_值; } _value=TEnum.values(); 返回_值; } },java,generics,enums,Java,Generics,Enums,上面有两个“不能从静态上下文引用”的实例。它们看起来是分开的,所以我将它们视为不同的问题。我想了解两者 TEnum[]-为什么?这是一个任意类型的数组。(好吧,这就是我想要的) TEnum.values()-TEnum被声明为Enum类型,那么我是否应该能够使用属于所有Enum的静态函数 从你的评论中,我知道你想做什么 在这种情况下,您需要传递枚举的类并调用getEnumConstants: public class EnumFromInt<TEnum extends Enum<T

上面有两个“不能从静态上下文引用”的实例。它们看起来是分开的,所以我将它们视为不同的问题。我想了解两者

  • TEnum[]
    -为什么?这是一个任意类型的数组。(好吧,这就是我想要的)
  • TEnum.values()
    -TEnum被声明为Enum类型,那么我是否应该能够使用属于所有Enum的静态函数

从你的评论中,我知道你想做什么

在这种情况下,您需要传递枚举的类并调用
getEnumConstants

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;
    }
}
类EnumFromInt{

私有静态最终MapClass级泛型仅适用于Java中的实例,因此不能在静态上下文中引用它们。并且不能对泛型类型调用静态方法。我不知道后者背后的原因,但这里有一个相关的问题:@JohnBollinger,但它是:
TEnum extensed Enum
No,@shmosel,
TEnum
is表示类型的类型参数。用绑定声明它并不能使它成为对象或对象的标识符。@JohnBollinger我明白了,我误读了你的评论。不过,考虑到
TEnum
表示类型,我们有理由期望能够对所述类型调用静态方法。请查找Java泛型类型命名方法如果没有这个约定,就很难区分类型变量和普通类或接口名之间的区别
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);
    }
}