Java 更改包名称大小写约定的原因
Java reason for changing of package name case convention
就在你说这是重复之前,我已经看到了其他问题,我仍然想 post 这个。
所以我正在阅读 Thinking in Java -Bruce Eckel 这篇文章是关于小写命名约定的:
In Java 1.0 and Java 1.1 the domain extensions com, edu, org, net, etc., were capitalized by convention, so the library would appear: NET.mindview.utility.foibles. Partway through the development of Java 2, however, it was discovered that this caused problems, so now the entire package name is lowercase.
我在 "it was discovered that this caused problems" 遇到了问题。什么问题?不可能是域名冲突,因为域名全部大写,对吧?
我在 Google 上搜索过这个,但我得到的是:Why should java package name be lowercase?:
Package names are written in all lower case to avoid conflict with the names of classes or interfaces.
我也搜索了 java package lowercase convention changed all-caps domain name
但没有结果。
那么有人知道为什么他们中途更改了命名约定吗?
只是一个大胆的猜测,并非基于任何可靠的来源:包名称与文件系统目录结构相关联。可以想象,其中包含 NET
的包名称可能会导致问题,例如来自区分大小写的文件系统的源代码树被复制到/用于不区分大小写的文件系统,并且出于某种原因目录名称从 "NET" 更改为等效的 "net".
相反的方向也有同样的处理:从包名称解析文件系统路径,我可以想象这可能会导致一些歧义或至少让用户感到惊讶的情况。
我可以看出这在某些情况下会造成混淆。
另一个潜在的问题是它与 class 命名约定中允许的冲突。 类 通常是首字母大写,但对于例如首字母缩略词全部大写,例如一个名为 API
或 COM
之类的 class。这允许包和 class 命名约定之间存在一些重叠。但我的感觉是文件系统问题更有可能出现。
我认为书中的引用指的是如下错误:RS01799: IMPLEMENTATION CLASS IS NOT FOUND WHEN A JAVA PACKAGE NAME START S WITH AN UPPER CASE CHARACTER。
我认为作者写的不是程序员的困惑而是内部的 JVM 实现。我已经使用 JDK 1.8 进行了测试,但无法重现该问题。请注意在错误报告描述中使用“可能 找不到”。
就在你说这是重复之前,我已经看到了其他问题,我仍然想 post 这个。
所以我正在阅读 Thinking in Java -Bruce Eckel 这篇文章是关于小写命名约定的:
In Java 1.0 and Java 1.1 the domain extensions com, edu, org, net, etc., were capitalized by convention, so the library would appear: NET.mindview.utility.foibles. Partway through the development of Java 2, however, it was discovered that this caused problems, so now the entire package name is lowercase.
我在 "it was discovered that this caused problems" 遇到了问题。什么问题?不可能是域名冲突,因为域名全部大写,对吧?
我在 Google 上搜索过这个,但我得到的是:Why should java package name be lowercase?:
Package names are written in all lower case to avoid conflict with the names of classes or interfaces.
我也搜索了 java package lowercase convention changed all-caps domain name
但没有结果。
那么有人知道为什么他们中途更改了命名约定吗?
只是一个大胆的猜测,并非基于任何可靠的来源:包名称与文件系统目录结构相关联。可以想象,其中包含 NET
的包名称可能会导致问题,例如来自区分大小写的文件系统的源代码树被复制到/用于不区分大小写的文件系统,并且出于某种原因目录名称从 "NET" 更改为等效的 "net".
相反的方向也有同样的处理:从包名称解析文件系统路径,我可以想象这可能会导致一些歧义或至少让用户感到惊讶的情况。
我可以看出这在某些情况下会造成混淆。
另一个潜在的问题是它与 class 命名约定中允许的冲突。 类 通常是首字母大写,但对于例如首字母缩略词全部大写,例如一个名为 API
或 COM
之类的 class。这允许包和 class 命名约定之间存在一些重叠。但我的感觉是文件系统问题更有可能出现。
我认为书中的引用指的是如下错误:RS01799: IMPLEMENTATION CLASS IS NOT FOUND WHEN A JAVA PACKAGE NAME START S WITH AN UPPER CASE CHARACTER。
我认为作者写的不是程序员的困惑而是内部的 JVM 实现。我已经使用 JDK 1.8 进行了测试,但无法重现该问题。请注意在错误报告描述中使用“可能 找不到”。