我看到了一个代码,其中getter和setter方法被声明为private。我试图找出它背后的逻辑,我真的很难理解为什么你会将它们声明为私有?这与我们通过吸气剂和制定者试图实现的完全相反。
答案 0 :(得分:18)
我可以想到几个原因:
如果一个不同的程序员看到你的代码并希望访问一个变量,但是没有setter和getter,他可能会认为你只是忘了它们,并自己添加它们。但是,如果您将它们声明为private
,则它是一个意图声明,说我不希望从外部更改或访问这些变量。
假设您不想要public
个访问者。但也许您想要计算私有变量被更改的次数。每次访问该变量时,使用setter更容易,而不是递增计数。
同样,您不希望public
访问,但在调试期间,您可能希望在private
成员更改的每个位置放置断点。因此,不要在类中的任何地方设置断点,只需在访问器中设置一个断点即可。
答案 1 :(得分:9)
这与我们试图通过吸气剂和制定者实现的完全相反。
实际上,事实并非如此。声明getter和setter的原因是隐藏字段。这样做是为了避免不必要的耦合;即API的客户端,具体取决于API的实现细节。 (由于多种原因,这种耦合可能会有问题。)
使getter和setter private 的原因是使对象的抽象状态的相应部分变为私有。 很大程度上独立决定是否使用getter和setter。
虽然使用吸气剂和制定者的情况对私人国家来说并不那么强烈,但仍有实实在在的好处。例如:
getter / setter方法提供了添加额外行为或错误检查代码的位置。
它们还提供了添加调试代码或注入测试代码的位置(用于单元测试)。
可以覆盖吸气剂和制定者。你不能用字段(私有或非私有)来做到这一点。