【发布时间】:2014-06-26 09:55:19
【问题描述】:
这可能看起来与其他一些问题相似,但到目前为止我还没有找到解决方案..
我正在使用反射将我的 JSON 解析为不同的类,它为我节省了编写特定于类的解析代码的大量精力,所有的整数、长整数、字符串和日历等都很容易处理,但现在我发现自己陷入了 Enum 特定铸件的地狱
类似:
else if (field.getType().isAssignableFrom(TransactionType.class)){
field.set(representation, TransactionType.fromInt(Integer.parseInt(value, 10)));
}
问题是枚举在 JSON 中存储为整数,当我不知道枚举具体是什么时,我找不到一种通用的方法来解析或将这些整数转换回枚举,而且我有很多枚举很少,所以我 70% 的解析代码现在专门用于检查枚举类型...
有没有一种方法,只给定 field.getType().isEnum() == true,将 int 值解析为该字段的枚举类型
枚举类型声明为:
public static enum TransactionType{
cashback(0),deposit(1),withdraw(2),invitation(3);
public int code;
TransactionType(int code){
this.code = code;
}
private final static TransactionType[] map = TransactionType.values();
public static TransactionType fromInt(int n){
return map[n];
}
}
JSON 可能有点复杂,但枚举相关字段的格式如下:
{transactionType: 1, someOtherEnumType: 0}
【问题讨论】:
-
我对 int 值与枚举的关系有点困惑。您能否举一个简短的示例说明如何知道示例枚举的 int 值是什么? EG:你在用
ordinal()吗? -
hummm,以问题中的TransactionType为例:public static enum TransactionType{ cashback(0),deposit(1),withdraw(2),invitation(3);public int code; TransactionType(int code){ this.code = code; }}
-
还有一个fromtInt函数:private final static TransactionType[] map = TransactionType.values(); public static TransactionType fromInt(int n){ return map[n]; }
标签: java parsing generics reflection enums