更改包名称约定的Java原因

时间:2016-08-30 15:40:25

标签: java naming-conventions

就在你说这是重复之前,我已经看到了其他问题,我仍然想发布这个问题。

所以我正在阅读 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,但无济于事。

那么有人知道为什么他们中途改变了命名惯例吗?

2 个答案:

答案 0 :(得分:3)

只是一个疯狂的猜测,不是基于任何可靠的来源:包名称与文件系统目录结构相关联。其中包含NET的包名称可能会导致问题,例如来自区分大小写的文件系统的源树被复制到/不使用不区分大小写的文件系统,无论出于何种原因,目录名称已从" NET"相当于" net"。

相反方向也是如此:从包名解析文件系统路径,我可以想到这可能会导致一些歧义或者至少让用户感到意外的情况。

在某些情况下,我可以看到这会引起混淆。

另一个潜在的问题是它与类命名约定中允许的内容相冲突。类通常是首字母大写,但对于例如,它并不罕见。首字母缩略词是所有的资本,例如一个名为APICOM的类。这允许包和类命名约定之间的一些重叠。但我的感觉是文件系统问题更可能是一个问题。

答案 1 :(得分:1)

我认为书中的引用是指如下错误:RS01799: IMPLEMENTATION CLASS IS NOT FOUND WHEN A JAVA PACKAGE NAME START S WITH AN UPPER CASE CHARACTER

我不认为作者写过程序员混淆但内部JVM实现。我使用JDK 1.8进行了测试,无法重现问题。请注意在错误报告说明中使用“可能”。