为什么要声明 getters 和 setters 方法私有?

2022-09-01 19:11:10

我看到一个代码,其中 getter 和 setters 方法被声明为私有。我试图弄清楚它背后的逻辑,我真的很难理解你为什么要宣布他们是私人的?这与我们试图通过获取者和二传手实现的目标完全相反。


答案 1

我可以想到几个原因:

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

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

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

假设您不需要访问器。但也许你想要一个私有变量被更改的次数。使用 setter 比每次访问该变量时增加计数更容易。public

  • 您想要一个中央接入点

同样,您不希望访问,但在调试期间,您可能希望在更改成员的每个位置放置一个断点。因此,您无需在类中所有位置设置断点,只需在访问器中设置一个断点即可。publicprivate


答案 2

这与我们试图通过获取者和二传手实现的目标完全相反。

实际上,事实并非如此。声明公共 getter 和 setters 的原因是隐藏字段。这样做是为了避免不必要的耦合;即 API 的客户端取决于 API 的实现细节。(由于多种原因,这种耦合可能会有问题。例如,对字段类型的依赖性,字段发生意外更改的可能性。

声明 getters 和 setters 私有的原因是使对象抽象状态的相应部分(即值)成为私有。这在很大程度上与使用 getter 和 setter 或不隐藏实现类型、阻止直接访问等的决定无关。

虽然使用 getter 和 setters 的理由对于私有国家来说并不强,但使用 private getter 和/或 setter 仍然有切实的好处。例如:

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

  • 它们可以提供记录状态更改或访问字段的位置。

  • 它们可以提供在测试时添加调试代码的位置。(可能不是最好的调试方法。


推荐