【发布时间】:2011-01-17 05:00:03
【问题描述】:
我遇到了这个问题,我不知道实际的 enum 类型,我需要迭代它的可能值。
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
任何想法如何从 enumValue 中提取其可能值?
【问题讨论】:
我遇到了这个问题,我不知道实际的 enum 类型,我需要迭代它的可能值。
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
任何想法如何从 enumValue 中提取其可能值?
【问题讨论】:
调用Class#getEnumConstants 以获取枚举的元素(如果不是枚举类,则为空)。
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
【讨论】:
enum 对象上的getClass() 可能会返回enum 类型本身的子类型(例如,如果enum 常量覆盖enum 类型的方法)。 getDeclaringClass() 返回声明该常量的 enum 类型,这就是您想要的。
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
或者
YourEnumClass[] yourEnums = YourEnumClass.values();
【讨论】:
枚举的values方法
enum.values() 方法返回所有枚举实例。
public class EnumTest {
private enum Currency {
PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
private String value;
private Currency(String brand) {
this.value = brand;
}
@Override
public String toString() {
return value;
}
}
public static void main(String args[]) {
Currency[] currencies = Currency.values();
// enum name using name method
// enum to String using toString() method
for (Currency currency : currencies) {
System.out.printf("[ Currency : %s,
Value : %s ]%n",currency.name(),currency);
}
}
}
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
【讨论】:
Enums 就像Classes 一样,它们是键入的。您当前的代码只是检查它是否是 Enum,而没有指定它属于哪种类型的 Enum。
因为你还没有指定枚举的类型,你将不得不使用反射来找出枚举值列表是什么。
你可以这样做:
enumValue.getDeclaringClass().getEnumConstants()
这将返回一个 Enum 对象数组,每个对象都是可用选项之一。
【讨论】:
... 还是 MyEnum.values() ?还是我错过了什么?
【讨论】:
这里,Role 是一个枚举,其中包含以下值 [ADMIN, USER, OTHER]。
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
【讨论】:
也可以像这样使用 java.util.EnumSet
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}
【讨论】:
任何试图以列表形式获取所有值的人都可以这样做。
Arrays.asList(YouEnumClass.values())
【讨论】: