为什么我们不应该使用(默认)src包?

问题描述 投票:3回答:6

我最近开始使用Eclipse IDE并且在许多地方读过一个不应该使用默认(src)包并创建新包的地方。 我只想知道背后的原因。

java package default-package
6个回答
13
投票

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


4
投票

最初,它旨在确保不同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完成),如果它存活的时间足够长,可以发布到野外。


1
投票

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


1
投票

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


1
投票

我能想到的主要原因是:

  1. 它保持组织有序,这将帮助您(和其他人!)知道在哪里寻找类/功能。
  2. 如果类在不同的包中,则可以定义具有相同名称的类。
  3. 默认包中的类/ etc无法导入到命名包中。这意味着,为了使用您的类,其他人也必须将所有类放在默认包中。这加剧了原因1和2解决的问题。

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.