kotlin获取泛型集合的类型信息

通过 reified 关键字和内联函数来实现

inline fun  getClassFromList(list: List): Class {
    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 之前,与泛型相关的信息会被擦除掉,这个过程被称为类型擦除。

你可能感兴趣的:(kotlin,kotlin,泛型,集合类型)