【问题标题】:Why shouldn't we use the (default)src package?为什么我们不应该使用(默认)src 包?
【发布时间】:2019-02-28 19:20:53
【问题描述】:

我最近开始使用 Eclipse IDE,并在许多地方阅读了不应使用默认 (src) 包并创建新包的地方。
我只是想知道这背后的原因。

【问题讨论】:

  • 你检查this了吗?它没有提供理由,但解释了默认包并非在所有情况下都有效。也许这就够了……
  • 默认包不是'src',它有一个空名称。

标签: java package default-package


【解决方案1】:

使用默认包可能会产生命名空间冲突。想象一下,您正在创建一个包含 MyClass 类的库。有人在他的项目中使用您的库,并且在他的默认包中也有一个 MyClass 类。编译器应该做什么? Java 中的包实际上是一个完全标识您的项目的名称空间。所以在现实世界的项目中不要使用默认包是很重要的。

【讨论】:

  • 感谢您的快速回复.. :)
  • 编译器应该做的第一件事是向选择课程的人的睾丸(显然是为女性调整身体部位)发出短暂、尖锐的电震动MyClass 的名称。哦,抱歉,这是一个示例,我很抱歉 :-)
【解决方案2】:

最初,它的目的是确保不同 Java 代码之间没有冲突。

因为 Java 旨在在任何地方和通过网络运行(这意味着它可能会从 Sun、IBM 甚至 Joe Bloggs 和 Dodgy Software Company Pty Ltd 获取信息),事实上我拥有paxdiablo.com(我实际上没有,但为了这个答案,我们假装我这样做)意味着调用我所有的代码com.paxdiablo.blah.blah.blah 是安全的,并且不会干扰其他任何人,除非他们是以某种方式精神缺陷并使用了我的命名空间:-)

来自chapter 7, "Packages", of the Java Language Spec

程序被组织成一组包。每个包都有自己的一组类型名称,这有助于防止名称冲突。

实际上,我通常从使用默认包开始,并且只有在它存在足够长的时间以发布到野外时才将其移动到真正的包中(这对 Eclipse IDE 来说相当容易)。

【讨论】:

    【解决方案3】:

    Java 使用包作为区分类的一种方式。通过使用包,您可以拥有一个 org.example.Something 类和一个 org.example.extended.Something 类,并且能够区分它们,即使它们都被命名为 Something。由于它们的包不同,您可以在同一个项目中使用它们。

    【讨论】:

    • 以上,再加上以结构化的方式组织事物通常是更好的做法。例如,您可能不会将计算机上的所有文件都保存在桌面上。它可以正常工作,但将逻辑上相似的事物组合在一起更有意义。
    • @Davey,我妻子自 1990 年以来收到的每封封电子邮件几乎都保存在她的收件箱中。真烦人:-)
    【解决方案4】:

    通过声明一个包,您可以定义自己的命名空间(用于类)。这样,如果您有两个使用不同包名称(命名空间)的相同类,将区分您要使用哪一个。

    【讨论】:

      【解决方案5】:

      我能想到的主要原因是:

      1. 它使事情井井有条,这将帮助您(和其他人!)知道在哪里寻找课程/功能。
      2. 如果它们位于不同的包中,您可以定义具有相同名称的类。
      3. 默认包中的类/等不能导入命名包。这意味着为了使用您的类,其他人也必须将他们所有的类都放在默认包中。这加剧了原因 1 和 2 所解决的问题。

      【讨论】:

        【解决方案6】:

        从 java 的角度来看,您可以遵循两个通用的开发/部署生命周期,使用 ant 构建和部署,或者使用 maven 生命周期。这两个生命周期都在本地目录中查找源代码和资源,对于 maven,在本地或网络上定义的存储库中查找源代码和资源。

        关键是,当您为开发和最终部署设置项目时,您希望构建一个可移植的、不依赖于 IDE 的项目结构,即。您的项目可以使用您的任一构建环境来构建和部署。如果您在提供类变量、编译路径等方面严重依赖 Eclipse 框架。您可能会遇到这样的问题,即您的项目只能使用该配置进行构建和部署,并且它可能无法移植到另一个开发人员环境,可以这么说。

        【讨论】:

        • 不错的答案,但问错了问题:OP 询问的是像 com.exmaple.myapp 这样的包结构,而不是用于部署的打包代码。
        • 啊.. 好的,所以他在问包有什么意义???,为什么不把所有东西都放在一个文件夹/包 src 下。我明白了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 2011-04-22
        • 2011-05-16
        • 1970-01-01
        相关资源
        最近更新 更多