java - 为什么getter和setter方法在java中很重要?

标签 java methods getter-setter

我被教导要始终使用 getter 和 setter。但是,我不知道这些方法的优缺点,因为通过实现它们,我们既暴露了数据又隐藏了它。

我对此有点困惑。任何人都可以就我们为什么使用 getter/setter 以及优势是什么提供一些适当的建议吗?

最佳答案

在封装方面,基本的“具有公共(public) getter 和 setter 的私有(private)字段,除了返回或设置字段之外什么都不做”模式确实完全没有意义,只是它让您有机会在不更改 API 的情况下稍后更改它。

所以不要不假思索地使用这种模式。仔细考虑您实际需要哪些操作。

getter 和 setter 的真正意义在于,您应该只在适当的地方使用它们,并且它们可以做的不仅仅是获取和设置字段。

  • 你只能有一个 setter/getter 。然后该属性是只读的。这实际上应该是最常见的情况。
  • 您可以只有一个 setter,使属性可配置,但传达任何其他内容都不应该依赖于它的值
  • getter 可以从多个字段计算一个值,而不是返回一个字段。
  • getter 可以制作防御性副本
  • getter 可以懒惰地执行昂贵的 fetch 操作并使用字段来缓存值
  • setter 可以进行完整性检查并抛出 IllegalArgumentException
  • setter 可以通知监听器值的变化
  • 您可以使用一个 setter 将多个字段设置在一起,因为它们在概念上属于一起。这不符合 JavaBeans 规范,因此如果您依赖需要 JavaBeans 的框架或工具,请不要这样做。否则,这是一个有用的选择。

所有这些都是隐藏在简单的“getter and setter”接口(interface)后面的实现细节。这就是封装的意义所在。

关于java - 为什么getter和setter方法在java中很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830772/

相关文章:

Groovy 中的动态方法调用

javascript - 在 JavaScript SDK 设计中使用访问器属性?

java - selenium - 需要从动态加载的分区中找到一个元素并单击它

java - 我写了 Accessors 和 Mutators 方法,但我仍然无法访问私有(private)变量!为什么?

php - 在 Woocommerce 3 中删除订单项目后未保存重新计算的总计

java - 在 java 中使用 ArrayList 的 getter 和 setter

java - java.sql.date 的 getter 和 setter

java - 请使用Java中的多线程

java - JAXB 混合内容列表包含换行符

java - 一个询问您要使用哪个网络浏览器的程序