【问题标题】:Difference between Getter/Setter and this other Data object ClassGetter/Setter 与其他数据对象类之间的区别
【发布时间】:2021-05-12 14:07:48
【问题描述】:

我正在开发一个带有返回 JSON 数据的 API 端点的移动应用程序,并且我做了很多 JSON 解析以在我的应用程序中显示不同类型的数据。

很长一段时间以来,我在我的 java 对象类中使用带有构造函数的 Getter Setter 来处理数据,但最近同事告诉我一种不同且简单的方法来处理这些确切的数据。两个不同的 dataObject 类是

我处理数据的方式

public class MyObject {
String _string1, _string2;
List<String> _stringsList;

public MyObject(String _string1, String _string2, List<String> _stringsList) {
    this._string1 = _string1;
    this._string2 = _string2;
    this._stringsList = _stringsList;
}

public String getString1() {
    return _string1;
}

public String getString2() {
    return _string2;
}

public List<PostO> getStringList() {
    return _stringsList;
}

}

我同事建议的方式

public class MyObject {
public String _string1, _string2;
public List<String> _stringsList;

public MyObject() { }

}

应用程序在这两种方法下都能正常工作。第二种方法简短易行。但这两者有什么区别?第二种方法有什么技术缺陷吗?在将我的课程转换为这种新方法之前,我真的需要知道。

如果重要的话,我开始使用 GSON 和第二种方法。

【问题讨论】:

  • 下面的答案几乎解释了它。但是,您仍然应该将字段设为private。如果我没记错的话,Gson 对私有字段绝对没有问题。这样您就可以在应用程序中保留封装。

标签: java android json object


【解决方案1】:

来自documentation

使用字段与 getter 来指示 Json 元素

一些 Json 库使用类型的 getter 来推断 Json 元素。我们选择使用所有字段(继承层次结构) 不是瞬态的、静态的或合成的。我们这样做是因为没有 所有类都是用适当命名的 getter 编写的。此外,getXXX 或者 isXXX 可能是语义而不是指示属性。

但是,也有很好的论据来支持属性。我们 打算在后一个版本中增强 Gson 以支持属性作为 用于指示 Json 字段的替代映射。 目前,Gson 是 基于字段。

如您所见,Gson 是基于字段的,在您的情况下,同一类的两个版本中的字段之间没有区别。

如果您将MyObject 仅用于反序列化目的,然后您将其转换为某种商业模式,您可以使用较短的版本。但如果MyObject 传播到许多层,它可能会与使用getters/setters 的其他类引入不一致。

也许Lombok 图书馆最适合您和您的同事使用?

【讨论】:

  • 感谢@Michal 的回答。我已经计划切换到较短的字段版本,因为现在我几乎每个请求都使用 Gson,并且较短的版本与 Gson 配合得很好。可能我会将现有项目中的所有 Getter/Setter 类转换为字段,因为它易于维护并避免两个类之间的任何不一致,正如您在答案中提到的那样。
  • @Joe,无论您使用哪种方法,第一个条件:它必须有效,第二个条件:它必须在整个项目中保持一致。两种方法都有优缺点。您可以争辩说它不满足OOP,但如果它适用于团队,您可以将其作为有效选项。从维护的角度来看,它可以减少代码的行数,但另一方面,getterssetters 可以由IDE 生成或与Lombok 一起编译。因此,这不是一个耗时的过程。尝试与团队坐下来,找到一种适合每个人的方法,每个人都会遵循它。
  • 再次感谢。你介意检查这个与 JAVA/JSON 相关的其他问题并帮助我解决问题吗? stackoverflow.com/questions/66122319/…
  • @Joe,如果我的回答对您有帮助,您可以接受。 How does accepting an answer work?
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 2013-01-26
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
相关资源
最近更新 更多