反序列化的时候可以使用 JSONObject
的 toJavaObject
方法,也可以使用 JSON
类的静态方法 parseObject
,直觉上它们应该是等价的,但有时候这两个方法具有不同的行为:
我基于 1.2.72
来编写这段代码,根据 #3266 ,这段代码使用了 1.2.71
引入的新特性 。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONCreator;
import com.alibaba.fastjson.annotation.JSONField;
import java.util.NoSuchElementException;
public enum Result {
Win(1),
Draw(0),
Loss(-1),
;
private final int code;
Result(int code) {
this.code = code;
}
@JSONField
public int getCode() {
return code;
}
@JSONCreator
public static Result from(int code) {
for (Result value : values()) {
if (value.code == code) {
return value;
}
}
throw new NoSuchElementException("cannot find result by " + code);
}
static class Expect {
public static void main(String[] args) {
Result result = JSON.parseObject("-1", Result.class);
if (result != Loss) {
throw new AssertionError("result is " + result);
}
}
}
static class Unexpect {
public static void main(String[] args) {
Result result = JSON.parseObject("-1").toJavaObject(Result.class);
if (result != Loss) {
throw new AssertionError("result is " + result);
}
}
}
}
1条答案
按热度按时间ajsxfq5m1#
用
1.2.76
执行,Unexpect
依然报错,但报错内容和1.2.72
不一样。