您是不是使用 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 中的默认(包)可见性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 朋友/包可见性

Java--继承

Java中枚举值的可见性

Kotlin 默认可见性为 public,是不是一个好的设计?

scala类中属性的可见性

您可以在 Java 中获得的最接近 C# 内部修改的内容是啥?