使用Java的默认包是一个坏习惯吗?

使用Java的默认包是一个坏习惯吗?

是的。 理想情况下,软件包名称应该是全球唯一的,以避免命名冲突。 使用默认包打破了这个约定。 从默认包中导入类也是不可能的。

为什么根本不存在未命名的软件包,如果这是一个坏主意? 从JLS§7.4.2开始 :

Java平台提供的未命名软件包主要是为了方便开发小型或临时应用程序或刚开始开发时提供的。

有许多不同层面的问题:

  • 您不能从默认包中的类中导入类
  • 如果尝试解决多个工件中的默认包,您将会遇到类加载问题
  • 您不能再像以前一样使用默认和受保护的范围
  • 你的代码和其他代码之间没有明显的区别

是的。 正如其他答案所述,你不能从默认包加载类。

看到答案:

如何从默认包中导入一个类
如何访问default-package中的java-classes?

但是,log4j要求configuration位于默认包中。 这是唯一合理的保持在那里。

编辑:正如肖恩·帕特里克·弗洛伊德和迈克尔在评论中指出的,你可以把任何configuration文件放到默认包中。 感谢你们两位向我指出这一点。

是的。 问题是无法从默认包中导入类。