考虑以下 Java 代码:
public class SomeClass{
private int data;
public void setData(int data){
this.data = data;
}
public int getData(){
return this.data;
}
}
在上面的代码中,数据的值可以从任何地方访问。那么为什么不直接公开现场数据呢?
考虑以下 Java 代码:
public class SomeClass{
private int data;
public void setData(int data){
this.data = data;
}
public int getData(){
return this.data;
}
}
在上面的代码中,数据的值可以从任何地方访问。那么为什么不直接公开现场数据呢?
为什么是 Getter 和 Setter?
许多人想知道为什么我们需要 Java 中的访问器和修改器方法(又名 getter 和 setter),为什么我们不能直接访问数据?但是这里封装的目的不是隐藏数据本身,而是如何操作这些数据的实现细节。因此,我们再次需要一种提供公共接口的方法,通过该接口我们可以访问这些数据。我们以后可以在不损害类的公共接口的情况下更改数据的内部表示。相反,通过暴露数据本身,我们损害了封装性,因此,在不影响其用户的情况下改变未来操作这些数据的方式的能力。我们将使用数据本身创建依赖关系,而不是使用类的公共接口。
我们可能想要封装对字段的访问有几个令人信服的原因。Joshua Bloch 的《 Effective Java》一书中描述了我所找到的关于这些原因的最佳概要。在第 14 项:最小化类和成员的可访问性中,他提到了几个原因,我在这里提到:
然而,理解封装不仅仅是隐藏字段是非常重要的。在 Java 中,我们可以隐藏整个类,从而隐藏整个 API 的实现细节。
通过阅读 Alan Snyder 的一篇名为《面向对象编程语言中的封装和继承》的精彩文章,我对这个重要概念的理解得到了拓宽和丰富,我向所有读者推荐了这篇文章。
因为您可以控制其他类如何设置数据。
您可以对输入进行检查,甚至可以根据您可能拥有的某些规则修改输入。
例如:
public class SomeClass{
private int data;
public void setData(int data){
if (data < 1000){
this.data = data;
}
else{
data = -1;
}
}
public int getData(){
return this.data;
}
}
即使现在看起来使用 getter/setter 方法没有意义,因为它们没有做任何有趣的事情,你需要考虑当需求改变时将来会发生什么。您可能会发现在设置值时需要添加一些验证;您可能会发现您需要更改整个实现,以便“get”方法实际上要从几条数据中计算一个值,或者从一个文件中读取它,或其他东西。而当这种情况发生时,如果你有其他类data
直接访问,你会被搞砸的。您将无法以您需要的方式更改实现,而不会带来很多痛苦。我是根据维护他人草率代码的痛苦经历的漫长而痛苦的经历。
有时情况要求某些变量只能出于读取或写入目的而访问。你可以通过getter和setter方法来实现。如果您将变量设为公共,则它可以被访问并且可以使用类对象更改其值。这种类型的模式称为 POJO。POJO is an acronym for Plain Old Java Object. The name is used to emphasize that a given object is an ordinary Java Object, not a special object.
此链接可以回答您的问题,并通过谷歌搜索 POJO 类的优势以获取更多信息。