通过 reified
关键字和内联函数来实现
inline fun <reified T> getClassFromList(list: List<T>): Class<T> {return T::class.java
}fun main() {val list = listOf("Hello", "World")val clazz = getClassFromList(list)println(clazz) // 输出 class kotlin.String
}
注:将reified 和 inline去掉就无法通过T::class.java获取到类型,因为编译的时候会进行类型擦除,所以在运行的时候已经无法获取到类型了,这是Java兼容性的处理机制,kotlin通过reified和inline优化了泛型,实现了运行时获取类型 。
Java 5才引入泛型,为了兼容性的考虑,采用类型擦除的机制来支持泛型。
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,这个过程被称为类型擦除。