Gson是否必须使用默认的无参数构造函数?

Gson用户指南指出,我们应该为任何可以正常使用Gson的类定义默认的无参数构造函数。甚至,在Gson 类的javadoc中InstanceCreator说,如果我们尝试对缺少默认构造函数的类实例进行反序列化,则会抛出异常,并且在这种情况下应使用该异常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而不需要默认的构造函数,或者在任何情况下它都不起作用?


神不在的星期二
浏览 1285回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java