整数値を含む属性を持つ 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タイプを残し、クラスだけを次のように変更しました。statusItem
@Root
public static class Item {
@Attribute(name="status")
private int status;
public Status getStatus() {
return Status.getByOrdinal(status);
}
}