在课堂上编写getter / setter时, setters 应该是私有方法吗?
必须编写另一个方法来设置变量似乎有点多余,但似乎可能允许更易于维护的代码结构。
答案 0 :(得分:2)
Setter是一种方法,可以允许修改对象的内部状态而不直接暴露该对象。我们以后可以在setter中包含验证或其他逻辑。
如果您的二传手是私人的,那么您就错过了这一点。这就像你家里的门一直关着,甚至不允许打开。在课堂上你可以直接访问该字段,为什么你会在那里使用setter?
当然真正的问题是:我们应该有制定者吗?如今典型的类包含一堆字段,自动生成的getter / setter而且没有逻辑。这不是一个阶级。它只是一种访问元素的笨拙方式的结构。但这不是你要求的。
答案 1 :(得分:1)
一般情况下,我不建议任何会员“私人”访问,也许“受保护”。通常,您或其他程序员可能会在后代课程中要求它。
长期无聊的描述性答案
现在,对于访问者(“getters& setters”),它还取决于编程语言的属性的语法和实现。
例如,C ++或Java,我认为没有“真实属性”,并且可能需要加法器与属性具有相同的范围。 (除非使用属性模板)。
C#& Delphi(Lazarus)已经实现了属性,但是,我不喜欢C#声明加法器的方式。
在某些情况下,您可能希望财产不公开,可能是“受保护”或“受保护”,以及其加密者,与财产相同的访问权限。
我只是在Object Pascal中使用一些代码。大多数“公共”及其加速器“受保护”的属性,但是,想要将该代码迁移到c ++或Java,因此,我也将加密器“公开”。
快速简答
与属性相同的访问权限,但是,取决于属性的语法。
答案 2 :(得分:0)
如果意图允许从外部对象操纵它们,它们应该是公共的。这是POJO实施的重点。 (http://en.wikipedia.org/wiki/Plain_Old_Java_Object)
如果您正在寻求实现其他模式,那么查看Java Access Modifiers上的文档应该是您的第一站(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html )
答案 3 :(得分:0)
通常你希望setter / getters是公共的,因为这就是它们的用途:提供对数据的访问,你不想让其他人直接访问,因为你不希望它们弄乱你的实现依赖细节 - 这就是封装的内容。
但是,在某些情况下,您可能希望将数据的访问权限仅限于同一类的实例,但您仍希望保留对数据访问的某些控制,无论出于何种原因(簿记,锁定等) - 在这种情况下,私有(或受保护的)setter / getter是有意义的(从代码重用和安全POV)。但是,你不能依赖编译器来抓住你做错的事情。