您是不是使用 Java 中的默认(包)可见性? [关闭]
Posted
技术标签:
【中文标题】您是不是使用 Java 中的默认(包)可见性? [关闭]【英文标题】:Do you use the default (package) visibility in Java? [closed]您是否使用 Java 中的默认(包)可见性? [关闭] 【发布时间】:2012-11-23 11:32:08 【问题描述】:java 中的默认可见性意味着只有同一个 java 包中的其他类可以访问它。我当然看到了它的用途,并且已经多次使用它。
另一方面,我遇到的 90% 的默认可见性只是来自忘记添加任何可见性关键字的开发人员。
因此,一方面,有合法用途,另一方面,它经常掩盖不良代码。您在开发团队中做什么?
【问题讨论】:
代码审查必须解决这些问题 :) 静态分析工具可以像 PMD 一样派上用场,如果您想应用严格的编码准则,请检查样式。 这个问题是为了辩论一些事情,所以我们希望问题可以回答,而不是辩论 @AmitD 有效点。在这种情况下,我会特别指出在代码审查阶段查找所有默认访问权限。 太糟糕了,没有关键字来指定包的可见性。它将允许区分“因为我忘记或因为我不知道该放什么而打包”和“因为我选择打包”。就我个人而言,当我选择使用包可见性时,我会以两个;
(int x;;
) 结束声明行
默认访问权限可能是我使用的最常见的访问级别,实际上,非常刻意使用。我遇到很多类的实现细节分布在几个类中,并且不想暴露这些细节。
【参考方案1】:
我鼓励人们使用private
,我希望它是默认值。
我不时地运行代码分析,将访问修饰符减少到只需要的部分。
【讨论】:
同意,我正是为此使用了UCDDetector 我使用具有批量快速修复功能的 IntelliJ。 ;) 批量修复让我的蜘蛛代码质量感觉刺痛 :) 我会检查一下 像“不必要的分号”一样,是否有人要手动修复它。但是,如果您可以一键完成整个项目,也许。 IntelliJ 有大约 200 个自动修复检查,如果你手头没有完整的代码库,有些是危险的。【参考方案2】:我通常会尝试让每个人都从最有限的范围开始,并且只有在我们认为设计中有必要时才开始向外扩展。有时,从private
迁移到package-private
的决定也是因为我们需要编写测试而不需要使用模拟框架(参见Powermock)。
此外,我们在可变性方面遵循相同的心态。一切都以final
开头,只有当我们看到需要修改状态时,我们才会将其删除。
【讨论】:
这听起来不错。如果有“包可见性”的关键字,而不是暗示它的空白,我会全力以赴。 一个好方法。关于测试的有趣点。 这与我一直使用的方法基本相同,当其他开发人员不效仿时,它会让我发疯。【参考方案3】:如果我特别想要包访问,我将 /* package */ 放在方法/变量等的定义之前,以确保人们知道我实际上是这个意思,而不是偷懒。不过我很少用。
【讨论】:
以上是关于您是不是使用 Java 中的默认(包)可见性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章