通过 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才引入泛型,为了兼容性的考虑,采用类型擦除的机制来支持泛型。文章来源:https://www.toymoban.com/news/detail-620443.html
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,这个过程被称为类型擦除。文章来源地址https://www.toymoban.com/news/detail-620443.html
到了这里,关于kotlin获取泛型集合的类型信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!