gpt4 book ai didi

java - 使用 SimpleFramework 动态转换为枚举

转载 作者:行者123 更新时间:2023-11-29 05:57:01 26 4
gpt4 key购买 nike

我有一个 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 的回答,我为 status 属性保留了 int 类型,我只修改了 Item 类:

@Root
public static class Item {

@Attribute(name="status")
private int status;

public Status getStatus() {
return Status.getByOrdinal(status);
}

}

最佳答案

也许通过遍历类型:

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);
}
}

关于java - 使用 SimpleFramework 动态转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686870/

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