【发布时间】:2013-09-09 19:16:03
【问题描述】:
Gson user guide 声明我们应该为任何类定义默认的无参数构造函数以正确使用 Gson。更重要的是,在 Gson 的 InstanceCreator 类的 javadoc 中,如果我们尝试反序列化缺少默认构造函数的类的实例,则会引发异常,并且我们应该在这种情况下使用 InstanceCreator。但是,我尝试使用缺少默认构造函数的类来测试使用 Gson,并且序列化和反序列化都可以正常工作。
这是反序列化的一段代码。没有非参数构造函数的类:
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
还有一个测试:
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
效果很好。
所以我的问题是:我真的可以在不需要默认构造函数的情况下使用 Gson,或者在任何情况下它不起作用吗?
【问题讨论】:
标签: java json gson default-constructor