Java Setter和Getter

nik*_*hil 15 java getter-setter

始终建议使用getter/setter访问私有变量.为什么将它们声明为公共并访问它们并不是一个更好的主意.无论如何我们使用getter和setter访问它?

mre*_*mre 19

封装.

隐藏内部状态并要求通过对象的方法执行所有交互称为数据封装 - 面向对象编程的基本原则.

也可以看看:


Sni*_*las 12

@mre答案非常好,你的问题很重要.总结一下:您将对象的字段设置为私有,以控制其他对象使用它的方式.您的对象使用setter:

  • 限制和验证传递给setter的数据
  • 隐藏其内部数据结构(其他对象感兴趣的服务不是如何构建服务,这也可以包括优化)
  • 保持每个州的完整性(如果需要,改变其他领域)

它将使用getter

  • 根据客户需要格式化输出中的数据
  • 控制一系列服务(例如,当且仅当已建立连接时,它才会提供数据)

欢迎来到OO编程的精彩世界和结构化编程的魔力.

斯特凡

  • 因此,如果您将字段设为私有并为其设置了setter/getters,那么您是否仍然将字段暴露给类之外的事物?这些字段也可以通过setter和getter进行修改......那么为什么要将它设置为私有并更好地设置setter/getter并保护它? (2认同)

And*_*rus 11

上面的所有答案都非常好,但是我还要补充一点.

希望所有私有变量都拥有公共getter和setter.

你的getter和setter指的是外部可见的状态.在某些情况下,在公共方法中发布的单个对象对应于实现的多个内部私有变量.在复杂对象中,许多私有变量不会映射到外部可见的内容.有些人无论如何都会自动为他们编写setter和getter,但这是一个坏主意,因为它暴露了你的实现细节.


use*_*613 7

我总是被告知,其中一个主要原因是试图规划未来的变化.它可能只是开始

public int getInt() { return _someInt;}
Run Code Online (Sandbox Code Playgroud)

但可能会最终成为

public int getInt() { 
  // do some processing
  return _someInt;
Run Code Online (Sandbox Code Playgroud)

}

这将使您不必对访问公共属性的地方进行大量更改,而不是使用getter/setter.


Nad*_*far 5

通常,setter允许您对分配给私有成员的值的类型进行限制.所以也许不允许负值等.

一个getter,因为你因为上述原因将其设为私有而强制访问该成员,所以允许消费者访问该成员的值.

  • 更一般地,附加到获取或设置值的任何行为(验证,触发其他操作等)可以添加到getter或setter而不会破坏接口兼容性.使用字段,您必须更改接口以添加行为. (2认同)