可能重复:
为什么要使用 getter 和 setter?
我知道这是非常微不足道的。但是为什么我们定义私有然后我们使用getter和setter。这更像是为了防止程序员在使用私有变量或方法时出错?还是出于安全原因。如果出于安全原因,那么拥有 getter 或 setter 的意义何在?我知道我们可以在 getter 和 setter 中设置限制,但那些 if 子句主要是为了防止错误而不是隐私限制。例如,我们通常不会说这些成员使用 if 子句限制对该方法的访问。
谢谢。
可能重复:
为什么要使用 getter 和 setter?
我知道这是非常微不足道的。但是为什么我们定义私有然后我们使用getter和setter。这更像是为了防止程序员在使用私有变量或方法时出错?还是出于安全原因。如果出于安全原因,那么拥有 getter 或 setter 的意义何在?我知道我们可以在 getter 和 setter 中设置限制,但那些 if 子句主要是为了防止错误而不是隐私限制。例如,我们通常不会说这些成员使用 if 子句限制对该方法的访问。
谢谢。
为每个变量自动、不假思索地创建getX()
和方法的做法是不好的。正如您所观察到的,这几乎毫无意义。setX()
但这是不好的部分。方法比暴露的变量要好得多,因为正如您所观察到的,您可以控制如何访问基础数据。如果您考虑一下自己在做什么,并酌情应用修改器和访问器,它们是一个很棒的工具:
synchronized
。这些只是你可以用 mutators 和 accessors 做的一些事情。通过使用它们,您可以使您的软件易于更改和维护。
如果允许任何人编辑类中的变量,那么可能会发生非常糟糕的事情。(例如,如果一个粗心的用户将分母更改为零,我们可能会破坏宇宙 [或得到除以零的错误])。定义get()
和set()
方法允许您(程序员)准确定义其他人如何与您的变量交互。
借助一个例子,让我解释一下这一点。假设我们有以下类:
class User {
private String username;
private String password;
}
现在在多个程序员工作的团队项目中。程序员A开发了User
类,程序员B必须在 GUI 界面上工作。决定的政策是该password
字段不能少于 5 个字符。但除非您没有创建数据字段,否则A和Bprivate
都必须始终检查分配给该字段的新密码的有效性。password
现在假设在制作它们之后private
您实现了以下 setter 方法:
public boolean setPassword( String temp ) {
if( temp.length() >= 5 ) {
this.password = temp;
return true;
}
else {
return false;
}
}
这样,只有A必须编码一次,B只需使用它而不必担心策略。这总是鼓励 DRY(不要重复自己)规则。
还有一个好处,如果您使用 getter 和 setter,它允许子类覆盖如何使用方法和更大的灵活性访问信息。
我们使用私有字段并具有 getter 和 setter,因此其他类可以访问这些私有字段。如果我在一个项目中有两个类,比如 Car.java 和 Driver.java,我们希望 Driver 对象能够访问 Car.java 中的私有字段“wheel”(否则 Driver 无法驾驶汽车)。但是如果该字段是私有的,则只能使用返回该字段值的 getter 方法来访问它。Setter 允许外部类更改字段的值。您可以通过使您的字段公开(或在适当情况下受保护)而不是私有来避免使用 getter 和 setter。
它允许您控制对事物的访问......通过封装对一段数据的访问,您可以自由更改该数据的位置,甚至可以使其可计算。即,不是返回字段的值,而是进行一些计算。
但是,与 getter 和 setter 一样好,如果你使用它们太多,那么它表明你没有得到一个对象来完成你需要的工作。
Setter 和 Getter 方法基本上用于限制其他人进行任何更改。在 Java 语言中,我们提供了数据隐藏概念。这是通过 get 和 set 方法实现的。