我有一个XML字符串,其属性包含整数值:
<item status="2" />
还有Simple Framework
类来描述此item
:
@Root
public static class Item {
@Attribute(name="status")
private int status;
public int getStatus() {
return status;
}
}
反序列化效果很好,但我希望能够将int
类型更改为定义的enum
类型。
public enum Status {
OK(0), PENDING(1), ERROR(2);
BetStatus(int status) {
this.status = status;
}
public int getStatus() {
return status;
}
}
快速修改:
@Root
public static class Item {
@Attribute(name="status")
private Status status;
public Status getStatus() {
return status;
}
}
然而现在我收到一个错误:
java.lang.IllegalArgumentException: 2 is not a constant in com.my.package.Status
在反序列化期间是否可以以这种方式投射int
?
我打赌我必须在我的Status
课程中添加一些魔术方法。
解决方案:
根据Reimeus
回答,我为int
属性留下了status
类型,我修改了Item
类:
@Root
public static class Item {
@Attribute(name="status")
private int status;
public Status getStatus() {
return Status.getByOrdinal(status);
}
}
答案 0 :(得分:2)
也许通过迭代类型:
public enum Status {
OK(0), PENDING(1), ERROR(2);
private int status;
Status(int status) {
this.status = status;
}
public static Status getByOrdinal(int ordinal) {
for (final Status element : EnumSet.allOf(Status.class)) {
if (element.ordinal() == ordinal) {
return element;
}
}
throw new IllegalArgumentException("Unknown status type: " + ordinal);
}
}