就在你说这是重复之前,我已经看到了其他问题,我仍然想发布这个问题。
所以我正在阅读 Thinking in Java -Bruce Eckel ,这篇文章是关于小写命名约定的:
在Java 1.0和Java 1.1中,域扩展名 com , edu , org , net 等。 ,按惯例大写,因此库将出现: NET.mindview.utility.foibles 。然而,在Java 2的开发过程中,发现这会导致问题,所以现在整个包名都是小写的。
我遇到的问题是“发现这会导致问题”。什么问题?它不可能是名称冲突,因为域名是全部大写的,对吧?
我在谷歌搜索过这个,但我得到的只有:Why should java package name be lowercase?:
包名称全部用小写编写,以避免与类或接口的名称冲突。
我也搜索过java package lowercase convention changed all-caps domain name
,但无济于事。
那么有人知道为什么他们中途改变了命名惯例吗?
答案 0 :(得分:3)
只是一个疯狂的猜测,不是基于任何可靠的来源:包名称与文件系统目录结构相关联。其中包含NET
的包名称可能会导致问题,例如来自区分大小写的文件系统的源树被复制到/不使用不区分大小写的文件系统,无论出于何种原因,目录名称已从" NET"相当于" net"。
相反方向也是如此:从包名解析文件系统路径,我可以想到这可能会导致一些歧义或者至少让用户感到意外的情况。
在某些情况下,我可以看到这会引起混淆。
另一个潜在的问题是它与类命名约定中允许的内容相冲突。类通常是首字母大写,但对于例如,它并不罕见。首字母缩略词是所有的资本,例如一个名为API
或COM
的类。这允许包和类命名约定之间的一些重叠。但我的感觉是文件系统问题更可能是一个问题。
答案 1 :(得分:1)
我认为书中的引用是指如下错误:RS01799: IMPLEMENTATION CLASS IS NOT FOUND WHEN A JAVA PACKAGE NAME START S WITH AN UPPER CASE CHARACTER。
我不认为作者写过程序员混淆但内部JVM实现。我使用JDK 1.8进行了测试,无法重现问题。请注意在错误报告说明中使用“可能”。