为什么采用setter和getter方法

时间:2012-07-23 02:59:05

标签: java utility-method

  

可能重复:
  Why use getters and setters?

我知道这非常微不足道。但是为什么我们定义私有,然后我们使用getter和setter。这更像是为了防止程序员在使用私有变量或方法时出错吗?或者是出于安全考虑。如果出于安全考虑,那么拥有吸气剂或制定者有什么意义呢?我知道我们可以在getter和setter中有限制但是那些if子句主要是为了防止错误而不是隐私限制。例如。我们通常不会说这些成员使用if子句限制对此方法的访问。

感谢。

7 个答案:

答案 0 :(得分:11)

自动,不假思索地为每个变量创建getX()setX()方法的做法是错误。正如你所观察到的那样,它几乎毫无意义。

但这是不假思索的部分,这很糟糕。方法比暴露变量无限好,因为正如您所观察到的,您可以控制如何访问基础数据。如果你关于你正在做什么,并适当地应用mutators和accessors,它们是一个很棒的工具:

  • 您可以将客户端限制为仅读取,但不能写入变量。
  • 您可以将整数的值限制为仅值(例如)。
  • 您可以确保一个变量总是等于另一个变量的一半(例如)。
  • 您可以确保在任何时候更改变量值时,都会发送一个事件来通知其他客户。
  • 您可以更改基础变量的数据类型,在公共方法中执行转换,而不是破坏任何客户端。
  • 您可以将对象转换为远程客户端以获取同一对象的服务器端版本,同样,客户端代码也不会更改。
  • 您可以使用synchronized访问器确保跨线程的严格内存排序。

这些只是一些你可以用mutator和accessors做的事情。通过使用它们,您可以轻松更改软件并轻松维护。

答案 1 :(得分:2)

如果允许任何人编辑类中的变量,那么可能会发生非常糟糕的事情。 (例如,如果一个粗心的用户将分母改为零,我们就可以破坏宇宙[或者除以零误差])。定义get()set()方法允许您(程序员)准确定义其他人如何与您的变量进行交互。

答案 2 :(得分:1)

我们使用私有字段并具有getter和setter,因此其他类可以访问这些私有字段。如果我在项目中有两个类,比如Car.java和Driver.java,我们希望Driver对象能够访问Car.java中的私有字段“wheel”(否则Driver无法驱动汽车)。但是如果该字段是私有的,则只能使用返回字段值的getter方法来访问它。 Setters允许外部类改变字段的值。您可以通过将字段公开(或在适当时受保护)而不是私有来避免使用getter和setter。

答案 3 :(得分:1)

它允许您控制对事物的访问.....通过封装对一段数据的访问,您可以自由地更改数据所在的位置,甚至可以使其可计算。即,不是返回字段的值,而是进行一些计算。

但是,与吸气剂和制定者一样好,如果你使用它们太多,那么它就是一个标志,你没有得到一个对象去做你需要的工作。

答案 4 :(得分:1)

还有一个好处,如果你使用getter和setter,它允许子类覆盖如何使用方法访问信息并且更灵活。

答案 5 :(得分:1)

借助一个例子让我解释一下。假设我们有以下类:

class User {
    private String username;
    private String password;
}

现在在一个多个程序员正在工作的团队项目中。程序员 A 开发了User类,程序员 B 必须在GUI界面上工作。确定的策略是password字段不能少于5个字符。但除非您尚未创建数据字段private,否则 A B 必须始终检查分配给{{1}的新密码的有效性} field。

现在假设在他们password之后你实现了以下的setter方法:

private

这种方式只有 A 必须对其进行一次编码, B 必须使用它而不必担心该政策。这总是鼓励DRY(不要重复自己)规则。

答案 6 :(得分:1)

Setter amd Getter Method主要用于限制其他人进行任何更改。在Java语言中,我们提供数据隐藏概念。这是由于get和set方法实现的。