我最近开始使用 Eclipse IDE,并在许多地方阅读了不应使用默认(src)包并创建新包的地方。
我只是想知道这背后的原因。
6 回答
使用默认包可能会产生命名空间冲突。想象一下,您正在创建一个包含MyClass
类的库。MyClass
有人在他的项目中使用您的库,并且在他的默认包中也有一个类。编译器应该做什么?Java 中的包实际上是一个完全标识您的项目的名称空间。所以重要的是不要在现实世界的项目中使用默认包。
最初,它的目的是确保不同 Java 代码之间没有冲突。
因为 Java 旨在在任何地方通过网络运行(这意味着它可能会从 Sun、IBM 甚至 Joe Bloggs 和 Dodgy Software Company Pty Ltd 获取信息),所以我拥有的事实paxdiablo.com
(我实际上并没有,但让我们为了这个答案假装我这样做)意味着调用我的所有代码是安全的com.paxdiablo.blah.blah.blah
,并且不会干扰其他任何人,除非他们在某种程度上有精神缺陷并使用我的命名空间:-)
程序被组织成一组包。每个包都有自己的一组类型名称,这有助于防止名称冲突。
实际上,我通常从使用默认包开始,并且只将它移动到真正的包中(使用 Eclipse IDE 很容易做到这一点),前提是它可以存活足够长的时间以发布到野外。
Java 使用包作为区分类的一种方式。通过使用包,您可以拥有一个 org.example.Something 类和一个 org.example.extended.Something 类,并且能够区分它们,即使它们都被命名为 Something。由于它们的包不同,您可以在同一个项目中使用它们。
通过声明一个包,您可以定义自己的命名空间(用于类)。这样,如果您有两个使用不同包名称(命名空间)的相同类,将区分您要使用哪一个。
我能想到的主要原因是:
- 它使事情井井有条,这将帮助您(和其他人!)知道在哪里寻找类/功能。
- 如果它们位于不同的包中,您可以定义具有相同名称的类。
- 默认包中的类/等不能导入到命名包中。这意味着为了使用您的类,其他人也必须将他们所有的类都放在默认包中。这加剧了原因 1 和 2 解决的问题。
从 java 的角度来看,您可以遵循两个通用的 dev/deploy 生命周期,使用 ant 构建和部署,或者使用 maven 生命周期。这两个生命周期都在本地目录中查找源代码和资源,对于 maven,在本地或网络上定义的存储库中查找源代码和资源。
关键是,当您为开发和最终部署设置项目时,您希望构建一个可移植的项目结构,并且不依赖于 IDE,即。您的项目可以使用您的任一构建环境来构建和部署。如果您在提供类变量、编译路径等方面严重依赖 Eclipse 框架。您可能会遇到这样的问题,即您的项目只能使用该配置进行构建和部署,并且它可能无法移植到另一个开发人员环境,可以这么说。