企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
把“泛型参数”和“函数参数”放在一起比较时,最容易混淆的是它们都叫“参数”,但**作用域、生效时机、目的**完全不同。 | 维度 | 泛型参数(Generic Parameter) | 函数参数(Method Parameter) | |---|---|---| | 写在哪儿 | 类名或方法名**右边**的尖括号里,如 `<T>` | 方法声明**圆括号**里,如 `(int a, String b)` | | 给谁用 | **编译器**——用来做类型检查、生成字节码 | **运行时**——方法体里真正拿来运算的值 | | 是值吗 | 不是值,甚至不是对象;只是一个**“类型占位符”** | 是**真正的变量**,JVM 会给它分配栈槽、传递实参 | | 生命周期 | 编译期有效,字节码生成后**被擦除**(Type Erasure) | 运行期仍在,方法调用栈里**真实存在** | | 能变吗 | 一旦在**调用点**指定(如 `IPage<RentBillDto>`),本次调用就**定死**了 | 每次调方法都能**传不同的值** | | 举例 | `IPage<RentBillDto>` 里的 `RentBillDto` 告诉编译器:“这一页里的每条记录必须是 RentBillDto 类型” | `getRentBillList(RentBillForm form)` 里的 `form` 是运行时真正传进来的查询条件对象 | 一句话记忆: **泛型参数是“给编译器看的类型标签”,函数参数是“给 JVM 用的数据”。**