为什么采用setter和getter方法

Sar*_*ara 2 java utility-method

可能重复:
为什么要使用getter和setter?

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

谢谢.

Ern*_*ill 11

对每个变量进行自动,不假思索的创建getX()setX()方法的做法很糟糕.正如你所观察到的那样,它几乎毫无意义.

但这是不假思索的部分.方法是远比暴露变量更好,因为,同样,当你看到,你可以控制如何底层的数据被访问.如果你考虑你正在做什么,并适当地应用mutators和accessors,它们是一个很棒的工具:

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

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

  • 很多时候,人们在不知道原因的情况下做事情,这绝对是其中之一!当您设计自己的类时,请遵循您不添加任何访问器方法的简单规则,除非有必要.永远不要添加它们"只是因为"! (2认同)
  • 这里的一个问题是JavaBeans规范本身 - 有各种各样的框架需要访问器和更改器才能访问您的私有字段,这种类型鼓励人们不经思考就自动生成它们,就像这样以某种方式创建类固有地封装好. (2认同)