我遇到这个问题,我不知道实际的enum
类型我需要迭代其可能的值。如何获得Java中的所有枚举值?
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
任何想法如何从enumValue中提取其可能的值?
我遇到这个问题,我不知道实际的enum
类型我需要迭代其可能的值。如何获得Java中的所有枚举值?
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
任何想法如何从enumValue中提取其可能的值?
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
Enum
s为的,因为它们只是键入lyke Class
ES。你当前的代码只是检查它是否是一个枚举,而没有指定它是什么类型的枚举。
因为您尚未指定枚举的类型,您将不得不使用反射来查找枚举值列表。
你能做到像这样:
enumValue.getDeclaringClass().getEnumConstants()
这将返回枚举对象的数组,每个是可用选项之一。
...或MyEnum.values()?或者我错过了什么?
是的,实际的枚举类不能在这里进行静态方法调用,只是一些Enum子类型的实例。 – ColinD 2010-02-16 14:41:41
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
或者
YourEnumClass[] yourEnums = YourEnumClass.values();
'YourEnumClass [] yourEnums = YourEnumClass.class.getEnumConstants();'解决了我从非静态方法调用的问题。 – Jeremy 2017-07-21 23:33:54
枚举
返回所有枚举实例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
为什么你使用getDeclaringClass()? – 2017-01-20 12:26:49
@PeterKriens:因为'enum'对象上的'getClass()'可能会自己返回一个'enum'类型的_subtype_(如果'enum'常量覆盖''enum'类型中的一个方法)。 'getDeclaringClass()'返回声明常量的'enum'类型,这就是你想要的。 – ColinD 2017-01-20 18:24:40
谢谢!我没有意识到这种情况,但你是对的,常数可以是一个匿名的内部类。 – 2017-01-23 13:58:31