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>) -
E:Element 的缩写,常用于集合类(如
ArrayList<E>、Iterator<E>) -
K 和 V:Key / Value 的缩写,专用于键值对结构(如
Map<K, V>、Pair<K, V>) -
N:Number 的缩写,多用于数值泛型场景(如自定义的
Range<N extends Number>) -
S、U、V 等:当需要多个参数时,按字母顺序往后排(如
<S, U, V>),保持简洁性
避免使用容易混淆或有歧义的字母
虽然语法上允许任何大写字母,但有些组合会带来理解成本或与已有约定冲突:
- 不用 C:它容易和
Class、Collection或颜色(Color)混淆;JDK 中几乎不用它作主类型参数 - 不用 I:易与数字
1或小写l视觉混淆,且和Integer冲突;应优先用 N 表示数值类型 - 不用 O:易与数字
0混淆,也不用于标准库中 - 不拼单词(如
Type、Item):那属于类型实参(如Box<String>),不是类型参数本身
多参数场景下注意语义顺序
当一个类或方法需要多个类型参数时,顺序要体现逻辑关系,而不是随意排列:
立即学习“Java免费学习笔记(深入)”;
-
Map<K, V>:键永远在前,值在后 —— 这是约定俗成的数据结构表达方式 -
BiFunction<T, U, R>(JDK):前两个是输入类型,最后一个是返回类型 -
Triple<L, M, R>(Guava 风格):用 L/M/R 表示左/中/右,比<A, B, C>更具可读性 - 如果参数间有继承关系,通常把更通用的放前面,如
<T, S extends T>
特殊情况:带边界的泛型参数仍遵守字母惯例
即使加了 extends 或 super 限定,类型参数名本身不变,边界只是补充说明:
- ✅
<T extends Comparable<T>>:T 还是 Type,强调它可比较 - ✅
<K extends CharSequence, V>:K 是 Key,同时限定为字符序列 - ❌
<KeyType extends CharSequence>:语法合法但违反命名规范,编译能过,但会被 IDE 警告、Code Review 打回


















