我有一个带有主类的独立 Swing 应用程序,我将其称为 MainClass。对这个 MainClass 的唯一访问是来自这个类的 main(String args[]) 方法。换句话说,这个类不会被任何其他类使用。
我应该将 MainClass 的成员字段设为“私有”吗?我认为这是多余的,因为没有其他类会实例化 MainClass,但另一位更有经验的程序员认为它违反了 Java 最佳实践,即不将字段标记为“私有”。
我有一个带有主类的独立 Swing 应用程序,我将其称为 MainClass。对这个 MainClass 的唯一访问是来自这个类的 main(String args[]) 方法。换句话说,这个类不会被任何其他类使用。
我应该将 MainClass 的成员字段设为“私有”吗?我认为这是多余的,因为没有其他类会实例化 MainClass,但另一位更有经验的程序员认为它违反了 Java 最佳实践,即不将字段标记为“私有”。
一般来说,你应该private
只拥有一个类的成员字段,不管你是在你的类内部还是外部使用它。(在某些情况下protected
,如果你希望它们可以从你的base class
)
您不希望外界直接访问您的领域...否则您将打破Encapsulation
.
话虽如此,在您的特定情况下,您也应该将它们作为私有字段。
即使目前无法从外部访问该课程,但最好还是安全一点..
Java是面向对象的。
如果 setter 和 getter 包含糟糕的 no 逻辑,则创建私有字段并不总是有意义。
确实,很多开发人员认为创建 getter 和 setter 并编写私有字段是封装 => 错误!
为什么封装数据很重要,尤其是如何封装?面向对象编程与过程编程有何不同?
你可以阅读这篇文章以获得一些答案:http://pragprog.com/articles/tell-dont-ask
然后这个:http
://en.wikipedia.org/wiki/Law_of_Demeter
和一个具体的例子:http://www.devdaily.com/java/java-law-of-demeter-java-examples
因此,根据我的说法,大约 99% 的情况下,字段必须是私有/或包或受保护的(但绝不是公共的,除非框架强加它......很少见)并且只能通过包装类方法来操作。而且在大多数情况下,令人惊讶的是,95% 的 getter/setter 可以因为无用而被删除。
这是一种完全不同的思维方式,很难停止思考程序,但它让你的代码更加灵活、干净并且最接近现实世界;)
你说:
我认为这是多余的,因为没有其他类会实例化 MainClass
我认为,一个好的设计的关键是要限制最多,只要它允许创建功能。如果开发人员过于宽容,程序可能会导致严重的奇怪冲突,从而导致行为。
开发人员必须尝试预测未来几年的程序(对于大型程序),并意识到未来的开发人员可能会在您的上下文中犯一些错误:在main
方法之外实例化您的类。
正如控制对类成员的访问中所讨论的,没有修饰符表示包私有访问,这允许对同一包中的其他类进行可见性。如果您不希望这样,请明确将成员设为私有。