java泛型参数名须用单个大写字母,如t(type)、e(element)、k/v(key/value)、n(number),多参数按字母或语义顺序排列,禁用易混淆字母c/i/o,带边界时仍遵循字母惯例。

Java 泛型参数名没有语法强制要求,但有一套被广泛接受、写在《Java 语言规范》和主流开源项目(如 JDK、Guava、Spring)中的命名惯例。起对名字不光让代码更专业,还能让团队协作时一眼看懂类型意图。
泛型参数用单个大写字母,不是单词
泛型类型参数必须是单个大写字母,比如 T、E、K、V、N。不能写成 StringType、ElementType 或小写的 t——这些都不符合规范。
-
T:Type 的缩写,最通用,用于表示任意类型(如
class Box<t></t>) -
E:Element 的缩写,常用于集合类(如
ArrayList<e></e>、Iterator<e></e>) -
K 和 V:Key / Value 的缩写,专用于键值对结构(如
Map<k v></k>、Pair<k v></k>) -
N:Number 的缩写,多用于数值泛型场景(如自定义的
Range<n extends number></n>) -
S、U、V 等:当需要多个参数时,按字母顺序往后排(如
<s u v></s>),保持简洁性
避免使用容易混淆或有歧义的字母
虽然语法上允许任何大写字母,但有些组合会带来理解成本或与已有约定冲突:
- 不用 C:它容易和
Class、Collection或颜色(Color)混淆;JDK 中几乎不用它作主类型参数 - 不用 I:易与数字
1或小写l视觉混淆,且和Integer冲突;应优先用 N 表示数值类型 - 不用 O:易与数字
0混淆,也不用于标准库中 - 不拼单词(如
Type、Item):那属于类型实参(如Box<string></string>),不是类型参数本身
多参数场景下注意语义顺序
当一个类或方法需要多个类型参数时,顺序要体现逻辑关系,而不是随意排列:
-
Map<k v></k>:键永远在前,值在后 —— 这是约定俗成的数据结构表达方式 -
BiFunction<t u r></t>(JDK):前两个是输入类型,最后一个是返回类型 -
Triple<l m r></l>(Guava 风格):用 L/M/R 表示左/中/右,比<a b c></a>更具可读性 - 如果参数间有继承关系,通常把更通用的放前面,如
<t s extends t></t>
特殊情况:带边界的泛型参数仍遵守字母惯例
即使加了 extends 或 super 限定,类型参数名本身不变,边界只是补充说明:
- ✅
<t extends comparable>></t>:T 还是 Type,强调它可比较 - ✅
<k extends charsequence v></k>:K 是 Key,同时限定为字符序列 - ❌
<keytype extends charsequence></keytype>:语法合法但违反命名规范,编译能过,但会被 IDE 警告、Code Review 打回
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











