【问题标题】:Why should java package name be lowercase?java包名为什么要小写?
【发布时间】:2012-09-14 02:22:28
【问题描述】:

其实这完全是理论上的问题。但有趣的是为什么 java 规范不允许在包中使用大写字母并导致写这样的东西:

com.mycompany.projname.core.remotefilesystemsynchronization.*

而不是

com.myCompanyName.projName.core.remoteFileSystemSynchronization.*

【问题讨论】:

标签: java package programming-languages naming-conventions


【解决方案1】:

直接来自Oracle Docs

包名全部小写以避免与 类或接口的名称。

【讨论】:

  • 包名也与文件系统目录一起使用,文件系统目录本身往往对字符大小写有限制。
  • 谁使用不支持大写的文件系统?你有 ext3、NTFS 或 mac 的东西,我们已经不是九十年代了
  • "避免与类名冲突" -> 不能将 com.site.myName 与类名混淆,因为在类的情况下,它将是 com.site.MyName(以大写字母开头)。所以没有逻辑支持“myname”方法。我认为“myName”更好,因为它更容易阅读。例如。 “com.marvel.movi​​es.gardiansofthegalaxy”
  • 是的,理论上。但实际上并非如此。可惜只是约定俗成。我来这里是因为我需要更改我同事的代码,他使用了company.AppName.something.else形式的包名。一旦您允许大写字母,就会有人以错误的方式使用它们。如果我现在想添加一个类company.AppName,我需要重命名整个包——我可能迟早会这样做。 ;-) 顺便说一句,remoteFileSystemSynchronization 对于包名来说是不是有点太长了?
  • 在您的情况下,AppName 不是 @joro 指示的 lowerCamelCase(在您的情况下,我可能会扼杀创建 AppName 的人,就像我想扼杀我们公司中创建类的人一样以小写字母开头...)。我是开发人员的一部分,他们认为 com.pany.app.tableOfContents 比 com.pany.app.tableofcontents(或 com.pany.app.toc)更容易阅读。而 com.pany.app.table.of.contents 就更糟了……
【解决方案2】:

但有趣的是为什么 java 规范不允许在包中包含大写字母并导致写这样的东西:

规范允许它就好了。使用全小写只是一个约定

正如 gtgaxiola 所说,这确实避免了与类型名称的冲突......在 .NET 命名约定中,这确实会发生,从而导致您do not name a class the same as its namespace 的建议。当然,使用 camelCase 包可以完全避免冲突。

我怀疑现实是在创建包命名约定时没有彻底考虑它。就我个人而言,我很少发现它是一个问题——如果我最终看到一个包含“remotefilesystemsynchronization”元素的包,那么大写并不是我关心的主要问题:)

【讨论】:

  • 真@乔恩!以大写开头的类名也是如此
  • 所以基本上,以小写开头的包子部分名称和大写的其他单词(如方法)将没有机会与类发生冲突,只要它们都以大写开头,对吗? :),但最重要的是,这将是唯一与之相关的有问题的冲突,因为我看不到包子部分名称与方法名称冲突...
【解决方案3】:

这只是另一种约定——有人可能会问为什么类名总是必须以大写开头,或者方法名总是以小写开头,然后是驼峰式。 Java 强制您使用这种方式。只是一组带下划线的规则有助于作为 Java 开发人员的庞大社区为大多数遵循约定的人编写易于理解的代码。

没有明确的理由可以这样分配。这正是当时大多数程序员在编写约定时感觉并且在实践中所使用的。但是是的,在编写约定之前肯定会有指导方针。我并不是说它是一个异想天开的作品。制定指南是为了通过查看各种元素,我们应该能够判断它的类、方法或包 - 并且通过遵循约定,它已经实现了这么久。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2011-01-09
    • 2019-11-24
    • 2016-04-04
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多