整数値を含む属性を持つ 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);
}
}