【问题标题】:Do you use the default (package) visibility in Java? [closed]您是否使用 Java 中的默认(包)可见性? [关闭]
【发布时间】:2012-11-23 11:32:08
【问题描述】:

java 中的默认可见性意味着只有同一个 java 包中的其他类可以访问它。我当然看到了它的用途,并且已经多次使用它。

另一方面,我遇到的 90% 的默认可见性只是来自忘记添加任何可见性关键字的开发人员。

因此,一方面,有合法用途,另一方面,它经常掩盖不良代码。您在开发团队中做什么?

【问题讨论】:

  • 代码审查必须解决这些问题 :) 静态分析工具可以像 PMD 一样派上用场,如果您想应用严格的编码准则,请检查样式。
  • 这个问题是为了辩论一些事情,所以我们希望问题可以回答,而不是辩论
  • @AmitD 有效点。在这种情况下,我会特别指出在代码审查阶段查找所有默认访问权限。
  • 太糟糕了,没有关键字来指定包的可见性。它将允许区分“因为我忘记或因为我不知道该放什么而打包”和“因为我选择打包”。就我个人而言,当我选择使用包可见性时,我会以两个 ; (int x;;) 结束声明行
  • 默认访问权限可能是我使用的最常见的访问级别,实际上,非常刻意使用。我遇到很多类的实现细节分布在几个类中,并且不想暴露这些细节。

标签: java visibility


【解决方案1】:

我鼓励人们使用private,我希望它是默认值。

我不时地运行代码分析,将访问修饰符减少到只需要的部分。

【讨论】:

  • 同意,我正是为此使用了UCDDetector
  • 我使用具有批量快速修复功能的 IntelliJ。 ;)
  • 批量修复让我的蜘蛛代码质量感觉刺痛 :) 我会检查一下
  • 像“不必要的分号”一样,是否有人要手动修复它。但是,如果您可以一键完成整个项目,也许。 IntelliJ 有大约 200 个自动修复检查,如果你手头没有完整的代码库,有些是危险的。
【解决方案2】:

我通常会尝试让每个人都从最有限的范围开始,并且只有在我们认为设计中有必要时才开始向外扩展。有时,从private 迁移到package-private 的决定也是因为我们需要编写测试而不需要使用模拟框架(参见Powermock)。

此外,我们在可变性方面遵循相同的心态。一切都以final 开头,只有当我们看到需要修改状态时,我们才会将其删除。

【讨论】:

  • 这听起来不错。如果有“包可见性”的关键字,而不是暗示它的空白,我会全力以赴。
  • 一个好方法。关于测试的有趣点。
  • 这与我一直使用的方法基本相同,当其他开发人员不效仿时,它会让我发疯。
【解决方案3】:

如果我特别想要包访问,我将 /* package */ 放在方法/变量等的定义之前,以确保人们知道我实际上是这个意思,而不是偷懒。不过我很少用。

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 2011-07-25
    • 2016-11-22
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2017-08-02
    相关资源
    最近更新 更多