如何通过反射获取内部 class 中存在的枚举值
How to fetch value of an enum present in an inner class through Reflection
大家好我正在尝试访问内部 class 中存在的枚举的值,如下所示,但我得到的不是值而是键。我的应用程序的需要是我必须通过反射访问这个值。
public class Test{
static class TwelveByTwentyFour {
public static enum BET_TYPE_NAME {
Direct12(12),AllOdd(12),AllEven(12), First12(12), Last12(12);
private int value;
BET_TYPE_NAME(int value){
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
}
public static String getBetTypeLength(String gameName,String betType) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException{
return Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME").getDeclaredField(betType).get(null).toString();
}
public static void main(String[] args) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException {
System.out.println(getBetTypeLength("TwelveByTwentyFour", "AllEven"));
}
}
在执行此操作时,我得到 "AllEven"
作为输出而不是 "12"
。任何人都可以告诉我如何获得价值来帮助我。
你正在调用 BET_TYPE_NAME.AllEven.toString()
并且它在父 Enum
class 中实现为 return 与 BET_TYPE_NAME.AllEven.name()
相同的值,因此你得到"AllEven"
.
要获得 "12"
,您需要覆盖 BET_TYPE_NAME
枚举中的 toString()
,例如:
@Override
public String toString() {
return this.value;
}
或者将 Field.get(null)
的结果转换为枚举 BET_TYPE_NAME
并对其调用 getValue()
:
return Integer.toString(((TwelveByTwentyFour.BET_TYPE_NAME)
Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME")
.getDeclaredField(betType).get(null)).getValue());
顺便说一句,枚举不应该有 setter 并且 value
应该总是 final — 枚举常量是共享的单例。
大家好我正在尝试访问内部 class 中存在的枚举的值,如下所示,但我得到的不是值而是键。我的应用程序的需要是我必须通过反射访问这个值。
public class Test{
static class TwelveByTwentyFour {
public static enum BET_TYPE_NAME {
Direct12(12),AllOdd(12),AllEven(12), First12(12), Last12(12);
private int value;
BET_TYPE_NAME(int value){
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
}
public static String getBetTypeLength(String gameName,String betType) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException{
return Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME").getDeclaredField(betType).get(null).toString();
}
public static void main(String[] args) throws IllegalArgumentException, SecurityException, ClassNotFoundException, IllegalAccessException, NoSuchFieldException {
System.out.println(getBetTypeLength("TwelveByTwentyFour", "AllEven"));
}
}
在执行此操作时,我得到 "AllEven"
作为输出而不是 "12"
。任何人都可以告诉我如何获得价值来帮助我。
你正在调用 BET_TYPE_NAME.AllEven.toString()
并且它在父 Enum
class 中实现为 return 与 BET_TYPE_NAME.AllEven.name()
相同的值,因此你得到"AllEven"
.
要获得 "12"
,您需要覆盖 BET_TYPE_NAME
枚举中的 toString()
,例如:
@Override
public String toString() {
return this.value;
}
或者将 Field.get(null)
的结果转换为枚举 BET_TYPE_NAME
并对其调用 getValue()
:
return Integer.toString(((TwelveByTwentyFour.BET_TYPE_NAME)
Class.forName(Test.class.getCanonicalName()+"$"+gameName+"$"+"BET_TYPE_NAME")
.getDeclaredField(betType).get(null)).getValue());
顺便说一句,枚举不应该有 setter 并且 value
应该总是 final — 枚举常量是共享的单例。