GSON如何创建一个no-zero-arg构造函数类的实例?

时间:2017-09-28 00:29:39

标签: java reflection gson

在下面的示例中,GSON似乎能够在不使用声明的构造函数的情况下在下面的程序中创建Program(p)的实例,同时也不存在其他零arg构造函数。这是如何通过图书馆完成的?

import com.google.gson.*;
import java.lang.reflect.*;

public class Program
{
    private final String _id;

    private Program(String id)
    {
        System.out.println("Constructor called.");
        _id = id;
    }

    public static void main(String[] args)
    {
        Gson gson = new Gson();

        String json = "{\"_id\":\"id1\"}";
        Program p = gson.fromJson(json, Program.class);

        System.out.println(p._id);

        boolean noArgConstructorAvailable;
        try
        {
            Object ctor = Program.class.getConstructor();
            noArgConstructorAvailable = ctor != null;
        }
        catch(NoSuchMethodException e)
        {
            noArgConstructorAvailable = false;
        }

        System.out.println(noArgConstructorAvailable);
    }
}

输出:

id1
false

0 个答案:

没有答案