我被教导要始终使用 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/