3

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

4

6 回答 6

13

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

于 2011-11-03T12:58:50.280 回答
4

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

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

来自Java 语言规范的第 7 章“包”

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

实际上,我通常从使用默认包开始,并且只将它移动到真正的包中(使用 Eclipse IDE 很容易做到这一点),前提是它可以存活足够长的时间以发布到野外。

于 2011-11-03T12:58:14.140 回答
1

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

于 2011-11-03T12:56:30.040 回答
1

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

于 2011-11-03T12:58:03.073 回答
1

我能想到的主要原因是:

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

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

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

于 2011-11-03T13:03:23.823 回答