我遇到了这个问题,我不知道enum
我需要迭代其可能值的实际类型.
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何从enumValue中提取其可能的值?
Col*_*inD 145
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
Run Code Online (Sandbox Code Playgroud)
小智 85
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
Run Code Online (Sandbox Code Playgroud)
要么
YourEnumClass[] yourEnums = YourEnumClass.values();
Run Code Online (Sandbox Code Playgroud)
Rod*_*own 13
Enum
s就像Class
es,因为它们是打字的.您当前的代码只是检查它是否是Enum而没有指定它所属的Enum类型.
因为您尚未指定枚举的类型,所以您必须使用反射来找出枚举值列表的内容.
你可以这样做:
enumValue.getDeclaringClass().getEnumConstants()
Run Code Online (Sandbox Code Playgroud)
这将返回一个Enum对象数组,每个对象都是可用选项之一.
小智 12
枚举的价值方法
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
此处,Role 是一个枚举,其中包含以下值 [ADMIN、USER、OTHER]。
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Run Code Online (Sandbox Code Playgroud)
也可以像这样使用 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);
}
Run Code Online (Sandbox Code Playgroud)