gpt4 book ai didi

java - 为什么 Google 的 JSON 转换器 "GSON"不遵循骑乘概念的方法?

转载 作者:行者123 更新时间:2023-12-04 05:41:39 24 4
gpt4 key购买 nike

看看以下场景:

public class ParentClass {

private Integer testVar = 1;

public Integer getTestVar() {
return testVar;
}

public void setTestVar(Integer testVar) {
this.testVar = testVar;
}
}


public class ChildClass extends ParentClass {

private Integer testVar = 2;

@Override
public Integer getTestVar() {
return testVar;
}

@Override
public void setTestVar(Integer testVar) {
this.testVar = testVar;
}
}


public class TestClass {

public static void main(String[] args) {

ChildClass childClass = new ChildClass();
childClass.setTestVar(3);
Gson gson = new Gson();
String str = gson.toJson(childClass);
System.out.println(str);
}
}

在这里,我使用了 com.google.gson.Gson 用于json转换的包。它给出以下输出:

{"testVar": 1}



我期望 json 字符串中有 3,但我得到的是 parentClass 的 testVar 变量所持有的值。
  • child 的 getTestVar 不应该覆盖 parent 的对手吗?
  • 是否直接访问实例成员(更改每个类的实例成员的名称,但保持 getter 名称相同证明了这一点)?
  • 如果是,任何人如何直接访问私有(private)成员?

  • 编辑:我已经编辑了这个问题。此版本仅在 json 中显示父级的值。有没有办法获取 child 的实例成员?

    最佳答案

  • 是的,确实如此
  • 是的,Gson 直接访问字段。执行类似任务的其他库通常允许您在字段和属性(即使用 getter 和 setter)访问之间进行选择,但 Gson 仅支持字段访问。
  • 私有(private)字段旨在使常规代码无法访问,但在某些特殊情况下(例如序列化/反序列化),直接访问它们是完全合理的。这就是您可以使用反射访问私有(private)字段的原因(参见 AccessibleObject )。
  • 关于java - 为什么 Google 的 JSON 转换器 "GSON"不遵循骑乘概念的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194175/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com