我遇到這個問題,我不知道實際的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