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

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

最佳答案

根据你的评论,我知道你想做什么。

在这种情况下,您需要传递枚举类并调用 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/

相关文章:

java - 在 Mongodb 中使用 View 的性能优势/劣势

Java nimbus 外观和感觉 View 总是不同的

c++ - 编译错误 - 类中的枚举

java - 创建指定参数类型或其子类型的 Arraylist

Swift 在泛型类中使用泛型函数

sorting - IntelliJ排序枚举成员

java - 使用来自不同类加载器的键的 EnumMap 的奇怪行为

java - JasperReports 错误 |尝试从Windows下的System32文件夹加载文件

java - 将一个 JTextArea 替换为另一个 JTextArea

.net - 如何使用泛型方法替换重复的属性?