0

我有一个带有主类的独立 Swing 应用程序,我将其称为 MainClass。对这个 MainClass 的唯一访问是来自这个类的 main(String args[]) 方法。换句话说,这个类不会被任何其他类使用。

我应该将 MainClass 的成员字段设为“私有”吗?我认为这是多余的,因为没有其他类会实例化 MainClass,但另一位更有经验的程序员认为它违反了 Java 最佳实践,即不将字段标记为“私有”。

4

3 回答 3

2

一般来说,你应该private只拥有一个类的成员字段,不管你是在你的类内部还是外部使用它。(在某些情况下protected,如果你希望它们可以从你的base class

您不希望外界直接访问您的领域...否则您将打破Encapsulation.

话虽如此,在您的特定情况下,您也应该将它们作为私有字段。

即使目前无法从外部访问该课程,但最好还是安全一点..

于 2012-09-27T18:24:49.263 回答
2

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方法之外实例化您的类。

于 2012-09-27T18:25:21.107 回答
1

正如控制对类成员的访问中所讨论的,没有修饰符表示包私有访问,这允许对同一包中的其他类进行可见性。如果您不希望这样,请明确将成员设为私有

于 2012-09-28T00:18:27.767 回答