为什么要声明getter和setter方法是私有的?

时间:2012-01-24 08:12:40

标签: java encapsulation getter-setter

我看到了一个代码,其中getter和setter方法被声明为private。我试图找出它背后的逻辑,我真的很难理解为什么你会将它们声明为私有?这与我们通过吸气剂和制定者试图实现的完全相反。

2 个答案:

答案 0 :(得分:18)

我可以想到几个原因:

  • 您希望阻止将来的公共访问。

如果一个不同的程序员看到你的代码并希望访问一个变量,但是没有setter和getter,他可能会认为你只是忘了它们,并自己添加它们。但是,如果您将它们声明为private,则它是一个意图声明,说我不希望从外部更改或访问这些变量

  • 您想将设置与获取其他操作相关联

假设您不想要public个访问者。但也许您想要计算私有变量被更改的次数。每次访问该变量时,使用setter更容易,而不是递增计数。

  • 您想要一个中央接入点

同样,您不希望public访问,但在调试期间,您可能希望在private成员更改的每个位置放置断点。因此,不要在类中的任何地方设置断点,只需在访问器中设置一个断点即可。

答案 1 :(得分:9)

  

这与我们试图通过吸气剂和制定者实现的完全相反。

实际上,事实并非如此。声明getter和setter的原因是隐藏字段。这样做是为了避免不必要的耦合;即API的客户端,具体取决于API的实现细节。 (由于多种原因,这种耦合可能会有问题。)

使getter和setter private 的原因是使对象的抽象状态的相应部分变为私有。 很大程度上独立决定是否使用getter和setter。

虽然使用吸气剂和制定者的情况对私人国家来说并不那么强烈,但仍有实实在在的好处。例如:

  • getter / setter方法提供了添加额外行为或错误检查代码的位置。

  • 它们还提供了添加调试代码或注入测试代码的位置(用于单元测试)。

  • 可以覆盖吸气剂和制定者。你不能用字段(私有或非私有)来做到这一点。