java - 为什么我不能从 Enum 对象类中获取 .values()?

标签 java enums

我想为任何枚举对象创建通用方法,该方法将检查枚举是否具有指定的值名称,但作为 Enum 类型对象,我无法使用方法 values(); 。为什么?

有什么方法可以从Enum 类型的对象中获取值吗?

我需要这样的方法来检查配置中的值是否是 myEnum.valueOf(String); 的有效字符串,因为如果给定的字符串是错误的,那么它会抛出异常(我确实这样做了不想要它)。

我希望我的方法看起来像这样:

public static Boolean enumContains(Enum en, String valueString){
    return toStringList(en.values()).contains(valueString.toUpperCase());
}

但是没有方法 Enum.values()。如何正确创建该方法?

最佳答案

Enum#values是一个由编译器生成的方法,所以你不能在编译时使用它,除非你传入一个特定的枚举而不是 Enum<?> .

参见:https://stackoverflow.com/a/13659231/7294647

一个解决方案是传入 Class<E extends Enum<E>>而是使用 Class#getEnumConstants :

public static <E extends Enum<E>> Boolean enumContains(Class<E> clazz, String valueString){
    return toStringList(clazz.getEnumConstants()).contains(valueString.toUpperCase());
}

如果您有一个名为 MyEnum 的枚举, 然后你可以简单地传入 MyEnum.class作为第一个参数。

关于java - 为什么我不能从 Enum 对象类中获取 .values()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53804709/

相关文章:

java - 获取二叉树特定级别的所有节点

Java泛型使用难度

c++ - 为什么编译器声称此类方法没有返回值?

java - 选择跟踪器实现

当 java 应用程序安装为 Windows 7 服务时,java.awt.Trayicon 不显示

c++ - 将指向枚举的指针传递给函数

c# - 枚举数组的 "general"类型是什么?

javascript - 枚举成员如何在 TypeScript 中使用别名?

java - AV Pipeline Kit Demo 不工作,有什么问题?

c# - 在 asp.net 中保留枚举值