Java中通用括号之间没有空格的推理

Adw*_*mar 6 java whitespace readability checkstyle code-readability

查看Checkstyle 文档中的GenericWhitespaceCheck

左尖括号 ( <):

  • 仅在通用方法定义中应以空格开头。
  • 在方法名称或类型名称之前不应以空格开头。
  • 在所有情况下都不应该跟有空格。

右尖括号 ( >):

  • 在所有情况下都不应该以空格开头。
  • 在几乎所有情况下都应该跟有空格,除了菱形运算符和方法名称之前。

我不确定我是否完全理解为什么后面<不应该跟一个空格以及为什么>前面不应该跟一个空格的原因。

换句话说,为什么Map<String>公约结束了Map < String >

这仅仅是因为随着参数数量和深度的增加,没有空格的版本更具可读性。

比如,Map<String, List<String>>比,更易读Map < String, List < String > >

另外作为一个一般问题,是否有一些存储库/指南可以解释 Checkstyle 约定背后的原因?

And*_*ner 5

关于泛型的早期教程(从 2004 年开始)的介绍说(强调我的):

\n\n
\n

本教程旨在向您介绍泛型。您可能熟悉其他语言的类似构造,尤其是 C++ 模板。如果是这样,您\xe2\x80\x99很快\n就会发现两者之间既有相似之处,也有重要的区别。如果您不熟悉其他地方相似的结构,那就更好了;您可以重新开始,而无需消除任何误解。

\n
\n\n

这是承认 Java 泛型看起来像 C++ 模板。<C++ 模板通常也会省略开头之后和结尾之前的空格>

\n\n

关于 Java 泛型的约定将遵循早期教程中的编写方式。

\n


hc_*_*dev 4

虽然我没有证据或研究作为我的理论的基础,但我的推理如下:

凝聚

(一种语言哲学)基本原理可能是:

类型的参数化(泛型的主要作用)如 inMap<String, Object>属于类型名称,就像括号和参数属于方法名称一样。因此,向签名添加参数应该遵循一致的间距规则:参数化括号周围没有空格(无论是在泛型类型的参数定义中,还是在方法的参数定义中)。

因此,天使括号连贯地定义了“类型签名”,并且应该尽可能接近类型(语义和空间),这意味着没有空间应该解开这种关系。

可读性

从(干净代码)的角度来看,避免使用空格有明显的好处:

天使括号周围的空格反而会使它们被误读或误解为逻辑比较运算符。