我最近开始使用Eclipse IDE,并在许多地方阅读过,不应该使用默认(src)软件包并创建新软件包。
我只是想知道背后的原因。为什么我们不应该使用(默认)src包?
回答
使用默认包可能会创建命名空间冲突。想象一下,你正在创建一个包含MyClass
类的库。有人在你的项目中使用你的图书馆,并且在他的默认包装中还有一个MyClass
类。编译器应该做什么? Java中的包实际上是一个完全标识你的项目的名称空间。因此,不要在现实世界的项目中使用默认包。
Thanx的快速回复.. :) – YetAnotherG33k
编译器应该做的_first_事情是提供一个短暂的,尖锐的电动颠簸睾丸(显然调整女性的身体部位)一个类名称MyClass。哦,对不起,这是一个_example,_我的道歉:-) – paxdiablo
@paxdiablo,=))) – Egor
Java使用该包作为区分类的方式。通过使用包,你可以有一个org.example.Something类和org.example.extended.Something类,并且能够区分它们,即使它们都被命名为Something。由于它们的包是不同的,你可以在同一个项目中使用它们。
以上,加上它通常是一个更好的做法,以结构化的方式组织事情。例如,您可能不会将所有文件保存在桌面上的计算机上。它可以正常工作,但将逻辑上相似的东西组合在一起更有意义。 – DaveyDaveDave
@戴维,我的妻子在她的收件箱中保存了她自1990年以来收到的任何一封电子邮件。这是可怕的讨厌:-) – paxdiablo
通过声明一个包,您可以定义自己的名称空间(对于类)。这样,如果你有两个相同的类,使用不同的包名称(名称空间)将区分你想使用哪一个。
最初,它的目的是确保不同部分Java代码之间没有冲突。
因为Java是为了在任何地方运行,和过网(这意味着它可能来自Sun,IBM,甚至李四和狡猾的软件公司私人有限公司回暖位),我拥有paxdiablo.com
的事实(我实际上并不假设我假装为了这个答案而做)意味着可以安全地拨打我的所有代码com.paxdiablo.blah.blah.blah
并且这不会干扰任何其他人,除非他们在某种程度上在精神上有缺陷并且使用我的命名空间:-)
从chapter 7, "Packages", of the Java Language Spec:
程序被组织为一组包。每个包都有自己的一组类型名称,这有助于防止名称冲突。
实际上,我通常首先使用默认包并将其移到真正的包中(如果它的存活时间足够长,可以放到真正的包中)。
从Java的角度来看,您可以使用两种通用的开发/部署生命周期,可以使用ant来构建和部署,也可以使用Maven生命周期。这两个生命周期都在本地目录中查找源代码和资源,在maven的情况下,在本地或网络中定义的存储库中查找源代码和资源。
问题是,当您为开发和最终部署设置项目时,您希望构建一个可移植的项目结构,而不依赖于IDE,即。您的项目可以使用任一构建环境进行构建和部署。如果您严重依赖Eclipse框架来提供类变量,编译路径等,您可能会遇到问题,即您的项目只能使用该配置j进行构建和部署,并且可能无法移植到其他开发人员环境,可以这么说。
很好的答案,但错误的问题:OP是问像“com.exmaple.myapp”的包结构,而不是打包代码进行部署。 –
啊..好的,所以他问包什么是????,为什么不把所有东西放在一个文件夹/包src下。我懂了。 –
我能想到的原因主要有:
- 它使组织的事情,这将有助于你知道到哪里寻找类/功能(和其他人!)。
- 如果它们位于不同的包中,则可以定义具有相同名称的类。
- 默认包中的类/ etc不能被导入到指定的包中。这意味着为了使用你的类,其他人将不得不把他们的所有类都放在默认包中。这加剧了原因解决的问题。
- 1. 为什么我不应该使用默认的java安全管理器
- 2. 为什么我们不能用默认值声明常量?
- 3. php,为什么我们不应该使用get('var');
- 4. 为什么我们不应该同时使用jspViewResolver和TilesViewResolver?
- 5. 为什么我们不应该在角度上使用jquery?
- 6. 为什么我不应该使用Unity?
- 7. 我们应该使用哪种JBoss配置 - web,标准,默认?
- 8. 为什么src/main/config中的hibernate.cfg.xml默认不是?
- 9. 什么是Autoconf?为什么人们使用它?我应该使用它吗?
- 10. 我们应该为中间继承类提供默认实现:
- 11. 默认情况下为什么不应用(RankNTypes使用)?
- 12. Rails:为什么不使用默认的应用程序布局?
- 13. 我们应该使用clone还是BeanUtils.copyProperties以及为什么
- 14. C#Lambda表达式:为什么我应该使用它们?
- 15. 为什么我们应该在angular2上使用subscribe()over map()?
- 16. 为什么我们应该实际使用依赖属性?
- 17. 为什么我们应该使用WSDL4j来开发Web服务?
- 18. FormSet - 为什么我们应该使用它?
- 19. 为什么我们应该使用URL编码?
- 20. 为什么我们应该使用webapi密钥
- 21. 何时以及为什么我们应该使用类System.ComponentModel.Container?
- 22. Python - 为什么我们应该使用模拟来做测试?
- 23. Java,为什么我们不能使用null作为包名?
- 24. 什么时候我们不应该使用[weak self]和[unowned self]?
- 25. 这个SQL为什么有效? (我不认为它应该!)
- 26. 为什么isEqualToString不按我认为应该的方式工作?
- 27. 为什么我不能使用数据库集默认值?
- 28. 我应该使用什么键为HashMap?
- 29. (为什么)我应该使用混淆?
- 30. 为什么我应该使用@properties?
您是否检查[this](http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package)?它没有提供任何理由,但解释说,默认包在所有情况下都不起作用。也许这就够了... – home
默认包不是'src',它有一个空的名字。 – EJP