在Java中使用单字符泛型类型名称的原因是什么?

Ada*_*old 4 java generics

在Java中,JDK中的大多数(或所有?)通用类都具有个位数的通用类型名称。例如HashMap,的定义如下所示:

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
Run Code Online (Sandbox Code Playgroud)

为什么这是约定而不是更具描述性的类型名称HashMap<KEY,VALUE>

Rub*_*ace 5

我认为这里的重点是简单约定。如果将单个字母用于泛型类型,将多个字母名称用于类名称,那么显然您要处理的是什么。另外,如果您直接使用KEY或VALUE,这些名称将看起来像常量名称。公约说:

UPPERCASE_AND_UNDERSCORE -> CONSTANTS

UpperCamelCase -> ClassNames

lowerCamelCase -> attributes

T,S,V -> genericTypes
Run Code Online (Sandbox Code Playgroud)

查看 官方文档

类型参数命名约定

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

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

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

K键

N-号码

T型

V-值

S,U,V等-第二,第三,第四类型

您将看到在Java SE API以及本课程其余部分中使用的这些名称。

  • 我实际上很遗憾这个约定,并且刚刚发现声纳 s00119 强制执行它:-( 大多数时候,当我使用通用时,它有一个精确的含义,即使它的实现是通用的。我觉得使用单字符名称是违背的[一般可读性约定](https://en.wikipedia.org/wiki/Naming_convention_(programming)#Readability)。 (3认同)