☰
第082篇 reified 泛型:擦除限制的破局者
2026/10/6 18:54:52 网站建设 项目流程

reified这个词很多人写得出,但被问"它为什么依赖 inline"就答不上。这题真正的考点是泛型擦除这个 JVM 机制:为什么x is T在普通函数里编译不过、reified到底做了什么、以及它有哪些不能做的事。把这三层讲清,后面关于泛型、序列化、依赖注入的追问都能接上。

先把结论放在前面:JVM 的泛型是擦除的——List<String>与List<Int>在字节码里都是List,类型参数在编译后被替换成上界(通常是Object),所以运行期拿不到T的Class对象。reified只能用在inline函数上,编译器会把调用点的实际类型写进函数体,等于把泛型"具体化"了。于是x is T、T::class、T::class.java、typeOf<T>()、泛型数组创建这些操作就都能编译通过。

机制拆解

用一个具体例子讲清。fun <T> isString(x: Any) = x is T—— 擦除后T变成Object

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询