在Java中是否使用默认(包)可见性?

在Java中是否使用默认(包)可见性?,java,visibility,Java,Visibility,java中的默认可见性意味着只有同一java包中的其他类可以访问它。我当然看到了它的用途,并且已经在好几个场合使用过它 另一方面,我遇到的90%的默认可见性只是来自一个忘记添加任何可见性关键字的开发人员 因此,一方面,它有合法的用途,另一方面,它常常掩盖坏代码。您在开发团队中做什么?我鼓励人们使用private,我希望它是默认的 我不时地进行代码分析,将访问修饰符减少到所需的程度。我通常试图让每个人都从最有限的范围开始,只有在我们认为设计中有必要时才开始向外扩展。偶尔,从private转移到pa

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

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


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

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


我不时地进行代码分析,将访问修饰符减少到所需的程度。

我通常试图让每个人都从最有限的范围开始,只有在我们认为设计中有必要时才开始向外扩展。偶尔,从
private
转移到
package private
的决定也是由我们编写测试的需要驱动的,而不必使用模拟框架(请参阅)


除此之外,我们在易变性方面也遵循同样的思路。一切开始时都是
最终的
,只有当我们看到需要修改状态时,我们才会删除它。

如果我特别想访问包,我会在定义方法/变量之前放置/*package*/,以确保人们知道我的真正意思,而不是懒惰。不过我很少使用它。

代码审查必须解决这样的问题:)如果你想应用严格的编码准则,静态分析工具可以像PMD、check style这样派上用场。这个问题是为了讨论一些事情,所以我们希望问题能够得到回答,而不是debated@AmitD正确的观点。在这种情况下,我会特别注意在代码审查阶段查找所有默认访问权限。可惜没有关键字来指定包可见性。它将允许区分“因为我忘了或因为我不知道该放什么而打包”和“因为我选择而打包”。就个人而言,当我选择使用包可见性时,我用两个
结束声明行
intx;;
)默认访问可能是我使用的最常见的访问级别,实际上,这是非常有意的。我遇到了很多类,它们的实现细节分布在几个类中,我不想公开这些细节。同意,我正是为此使用了IntelliJ,它有一个批量快速修复功能。;)批量修复使我的spidey代码质量感觉刺痛:)我会像“不必要的分号”一样检查它,有人会手动修复它吗。但是,如果你只需点击一下就可以完成整个项目,也许吧。IntelliJ有大约200个自动修复的检查,有些是危险的,特别是如果你手头没有完整的代码库。这听起来是个不错的方法。如果有一个“包可见性”的关键字,而不是一个表示它的空白,我会全力支持。这是一个好方法。关于测试的一点很有趣。这基本上是我一直使用的方法,当其他开发人员不这样做时,它会让我发疯。