什么时候应该使用 getter 和 setter?
getter 和 setter 非常适合配置或确定类的配置,或者从模型中检索数据
获取商品的价格是 getter 的完全合理的使用。这是需要可用的数据,并且可能涉及通过向设置器添加验证或清理来保护数据的特殊考虑。
您还可以提供 getter 而不提供 setter。他们不have to成对出现。
什么时候不应该使用 getter 和 setter?
有时,对象依赖于永远不会公开的内部属性。例如,迭代器和内部集合。暴露内部收藏可能会产生巨大的负面和意想不到的后果。
另外,例如,假设您正在通过某个 HttpURLConnection 进行通信。公开 HttpURLConnection 的 setter 意味着如果在等待接收数据时连接发生更改,您最终可能会遇到非常奇怪的状态。该连接应该在实例化时创建或完全在内部管理。
Summary
如果您拥有出于所有意图和目的而公开的数据,但需要进行管理:请使用 getter 和 setter。
如果您有需要检索的数据,但在任何情况下都不应更改:使用 getter 而不是 setter。
如果您有需要为内部目的设置的数据,并且永远不应该公开暴露(并且不能在实例化时设置):使用setter而不是getter(setter大概可以防止影响内部属性的第二次调用)
如果您有一些完全内部的东西,并且没有其他类需要访问它或直接更改它,那么就不要使用它们。
不要忘记 setter 和 getter 可以是私有的,甚至对于内部管理的属性来说,拥有一个管理属性的 setter 可能是可取的。例如,获取连接字符串并将其传递给 HttpURLConnection 的 setter。
另请注意:
艾伦·霍鲁布的文章为什么 getter 和 setter 方法是邪恶的 http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html似乎是OP推理的来源,但在我看来,这篇文章在解释其观点方面做得很差。
编辑:添加摘要
编辑2:拼写更正