java - 创建带有填充变量且没有任何 setter 或构造函数的对象

标签 java class object gson

我想了解为什么可以创建并填充一个仅具有私有(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类,它提供了检索类的FieldMethodConstructor的方法。

Gson 使用您提供的 Class 对象 Participant.class 来查找需要填充的所有字段。它解析 JSON 并(尝试)将它们一一映射。

关于java - 创建带有填充变量且没有任何 setter 或构造函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083452/

相关文章:

java - ActiveMQ 未启动

php - 尝试获取列数据时,类返回整数而不是对象

python - 将 Python 对象传递给另一个 Python 进程

html - 在 CLASS 或 ID 之前提及 HTML TAG 元素(良好或不必要的 CSS 做法?)

object - JNI : How can i check if jobject is a null object in native c code

java - 我如何在 java 中创建对象的副本,而不是指针

java - 在自定义 View 中触摸和删除触摸时绘制圆圈

java - 我的自定义存储库实现中的 CrudRepository

java - Ford Fulkerson 算法 Java

c++ - win32 编程 C++