默认的 no-args 构造函数对于 Gson 是必需的吗?
Gson 用户指南指出,我们应该为任何类定义默认的 no-args 构造函数,以便正确使用 Gson。更重要的是,在gson类的javadoc中说,如果我们尝试反序列化缺少默认构造函数的类的实例,我们将引发异常,我们应该在这种情况下使用。但是,我尝试在缺少默认构造函数的类中测试使用Gson,并且序列化和反序列化工作都没有任何问题。InstanceCreator
InstanceCreator
这是反序列化的代码段。没有非 args 构造函数的类:
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而不需要默认构造函数,或者有任何情况下它不起作用?