【问题标题】:What is the reason for using single-character generic type names in java?在 java 中使用单字符泛型类型名称的原因是什么?
【发布时间】:2016-12-02 10:47:32
【问题描述】:

在 Java 中,JDK 中的大多数(或全部?)泛型类都有一位数的泛型类型名称。比如HashMap的定义是这样的:

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {

为什么这是惯例而不是像HashMap&lt;KEY,VALUE&gt; 这样更具描述性的类型名称?

【问题讨论】:

  • 这个问题显然没有客观答案。
  • 一个原因可能是避免冗长
  • 当我在 Java 文件中找到像 KEY 或 VALUE 这样的标识符时,我的第一个想法是它们是常量……或者是名称不佳的类。另外,digit是数字,不是字符
  • 添加到@Pablo 的评论中,如果我看到KeyValue 我会认为它们是实际的具体类。 keyvalue 不能很好地适应 Java 语言风格的其他约定,所以 KV 对我来说似乎是最合理的选择
  • 当 STL 第一次出现时,我看到它在 C++ 中是这样做的。我不需要 TYPE 而不是 T。我认为将它们拼出来不会增加价值或理解。

标签: java generics


【解决方案1】:

我认为这里的重点是简单的约定。如果您对泛型类型使用单字母,对类名使用多字母名称,那么您正在处理的内容就很明显了。此外,如果您在指向时使用 KEY 或 VALUE,这些名称将看起来像常量名称。公约说:

UPPERCASE_AND_UNDERSCORE -> CONSTANTS

UpperCamelCase -> ClassNames

lowerCamelCase -> attributes

T,S,V -> genericTypes

查看the official documentation

类型参数命名约定

按照惯例,类型参数名称是单个大写字母。这与您已经知道的变量命名约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。

最常用的类型参数名称有:

E - 元素(Java Collections Framework 广泛使用)

K - 键

N - 数字

T - 类型

V - 值

S、U、V 等 - 第 2、第 3、第 4 类

您将在整个 Java SE API 和本课的其余部分中看到这些名称。

【讨论】:

  • 我真的很后悔那个约定,并且刚刚发现 sonar s00119 强制执行它:-( 大多数时候,当我使用泛型时,它具有精确的含义,即使它的实现是泛型的。我感觉使用单个字符名称与the general readability convention 相悖。
  • 我更喜欢google style guide,它允许驼峰式名称以T 结尾,例如ParameterT,当这个泛型的含义是“参数”时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2022-09-24
相关资源
最近更新 更多