Java Getter/Setter和这个其他数据对象类之间的区别

Java Getter/Setter和这个其他数据对象类之间的区别,java,android,json,object,Java,Android,Json,Object,我正在开发一个移动应用程序,其中API端点返回JSON数据,我在应用程序中进行了大量JSON解析以显示不同类型的数据 很长一段时间以来,我一直在java对象类中使用带构造函数的Getter Setter来处理数据,但最近一位同事告诉我一种处理这些精确数据的不同且简单的方法。这两个不同的dataObject类是 我处理数据操作的方式 public class MyObject { String _string1, _string2; List<String> _stringsList;

我正在开发一个移动应用程序,其中API端点返回JSON数据,我在应用程序中进行了大量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;
}

}
公共类MyObject{
字符串_string1、_string2;
列表_stringsList;
公共MyObject(字符串_string1、字符串_string2、列表_stringsList){
这个。_string1=_string1;
这个。_string2=_string2;
这个.\u stringsList=\u stringsList;
}
公共字符串getString1(){
返回_string1;
}
公共字符串getString2(){
返回_string2;
}
公共列表getStringList(){
返回字符串列表;
}
}
我同事建议的方式

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

public MyObject() { }

}
公共类MyObject{
公共字符串_string1,_string2;
公共列表_stringsList;
公共MyObject(){}
}
这两种方法都可以很好地使用。第二种方法简单,易于编辑。但是这两者之间有什么区别呢?第二种方法有什么技术缺陷吗?在将类转换为这种新方法之前,我真的需要知道

我开始用第二种方法使用GSON,如果有关系的话。

来自:

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

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

然而,也有很好的参数支持属性。我们 打算在后一版本中增强Gson,以支持作为 用于指示Json字段的备用映射目前,Gson是 基于字段。

正如您所看到的,
Gson
是基于字段的,在您的例子中,同一类的两个版本中的字段之间没有差异

如果您仅出于反序列化目的使用MyObject,然后将其转换为某种业务模型,则可以使用较短的版本。但在这种情况下,
MyObject
被传播到许多层,它可能会引入与其他使用
getter
/
setter
的类的不一致性

也许图书馆最适合你和你的同事使用

来自:

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

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

然而,也有很好的参数支持属性。我们 打算在后一版本中增强Gson,以支持作为 用于指示Json字段的备用映射目前,Gson是 基于字段。

正如您所看到的,
Gson
是基于字段的,在您的例子中,同一类的两个版本中的字段之间没有差异

如果您仅出于反序列化目的使用MyObject,然后将其转换为某种业务模型,则可以使用较短的版本。但在这种情况下,
MyObject
被传播到许多层,它可能会引入与其他使用
getter
/
setter
的类的不一致性

也许图书馆最适合你和你的同事使用


谢谢你的回答@Michal。我已经计划切换到短字段版本,因为现在我几乎所有的请求都使用Gson,短字段版本与Gson配合得很好。也许我会将现有项目中的所有Getter/Setter类转换为fields,因为它易于维护,并且可以避免这两个类之间的任何不一致,正如您在回答“当然”时提到的。@Joe,无论您使用哪种方法,第一个条件:它必须有效,第二个条件:它必须在整个项目中保持一致。这两种方法都有利弊。你可以说它没有实现OOP,但是如果它对团队有效,你可以选择它作为有效的选项。从维护的角度来看,它可以减少代码的行数,但从另一方面来说,
getter
setter
可以通过
IDE
生成,或者使用
Lombok
编译。因此,这不是一个耗时的过程。试着与团队坐下来,找到一种适合每个人的方法,每个人都会遵循。再次感谢。你介意检查一下与JAVA/JSON相关的另一个问题,帮我做点什么吗@乔,如果我的回答有帮助,你可以接受。谢谢你的回答@Michal。我已经计划切换到短字段版本,因为现在我几乎所有的请求都使用Gson,短字段版本与Gson配合得很好。也许我会将现有项目中的所有Getter/Setter类转换为fields,因为它易于维护,并且可以避免这两个类之间的任何不一致,正如您在回答“当然”时提到的。@Joe,无论您使用哪种方法,第一个条件:它必须有效,第二个条件:它必须在整个项目中保持一致。这两种方法都有利弊。你可以说它没有实现OOP,但是如果它对团队有效,你可以选择它作为有效的选项。从维护的角度来看,它可以减少代码的行数,但从另一个角度来看,
getter
setter
可以