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

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

我可以想到几个原因:

  • 你想防止未来的公共访问。

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

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

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

  • 你想要一个中央接入点

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

这与我们试图通过getter和setter实现的完全相反。

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

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

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

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

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

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