我想了解为什么可以创建并填充一个仅具有私有(private)变量和覆盖的构造函数的对象。
代码示例:
public class Test {
public static void main(String[] args) {
String json = "{\"id\":\"123546\"}";
Gson gson = new Gson();
Participant p = gson.fromJson(json, Participant.class);
System.out.println(p.getId());
}
}
public class Participant {
private int id;
public Participant() {
}
public int getId() {
return id;
}
}
正确打印“123546”。
gson.fromJson 方法具有以下签名:<T> T: fromJson(String json, Class<T> classOfT)
http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
最佳答案
Gson 与许多其他 JSON 解析器/生成器库一样,使用反射直接或通过方法填充字段。
通过reflection您可以访问类的公共(public)和非公共(public)成员并修改它们(字段)或调用它们(方法和构造函数)。
您的起点应该是 Class
类,它提供了检索类的Field
、Method
和Constructor
的方法。
Gson 使用您提供的 Class
对象 Participant.class
来查找需要填充的所有字段。它解析 JSON 并(尝试)将它们一一映射。
关于java - 创建带有填充变量且没有任何 setter 或构造函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083452/