我想为任何枚举对象创建通用方法,该方法将检查枚举是否具有指定的值名称,但作为 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/