gpt4 book ai didi

java - 如何通过反射获取内部类中存在的枚举的值

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:50 26 4
gpt4 key购买 nike

大家好我正在尝试访问内部类中存在的枚举的值,如下所示,但我得到的不是值而是键。我的应用程序的需要是我必须通过反射访问这个值。

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"。任何人都可以通过告诉我如何获得值(value)来帮助我。

最佳答案

您正在调用 BET_TYPE_NAME.AllEven.toString(),它在父 Enum 类中实现,以返回与 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 — 枚举常量是共享的单例。

关于java - 如何通过反射获取内部类中存在的枚举的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38519261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com