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

时间:2011-11-03 12:54:22

标签: java package default-package

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

6 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分: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完成),如果它存活的时间足够长,可以发布到野外。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我能想到的主要原因是:

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

答案 5 :(得分:0)

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

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