是否对独立 Swing 应用程序中的所有字段使用私有修饰符?

Posted

技术标签:

【中文标题】是否对独立 Swing 应用程序中的所有字段使用私有修饰符?【英文标题】:Whether to use private modifier for all fields in a standalone swing applicaton? 【发布时间】:2012-09-19 14:41:23 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

+1 for - “很多开发人员认为创建 getter 和 setter 并编写私有字段是封装 => 错误!” O.o ... @Mike.. 我不会为该答案添加更多投票.. :-\ @Rohit Jain 你有什么不喜欢的吗? @Mik378.. 我非常喜欢它.. 我希望我能投票两次.. :) 你已经介绍了大多数开发人员倾向于忽略的非常基本的东西.. 或者不重视..很好.. @Rohit Jain 啊!谢谢 !实际上,很多人忽略了这些概念。【参考方案2】:

正如Controlling Access to Members of a Class 中所讨论的,无修饰符 表示包私有 访问,它允许查看同一包中的其他类。如果您不希望这样,请明确将成员 private

【讨论】:

【参考方案3】:

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

您不希望外界直接访问您的字段...否则您将打破Encapsulation 的整个概念。

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

尽管目前该类不会从外部访问,但最好还是安全一点..

【讨论】:

以上是关于是否对独立 Swing 应用程序中的所有字段使用私有修饰符?的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing 文本字段中的 ANSI 颜色

Scala Swing 中的听众和反应

服务器公钥私钥总结

公钥和私钥怎么接独立站

《Java Swing》第1节:Swing简介

我必须使用哪个 Swing 组件在 java 的同一字段中应用不同样式的文本