跳到主要内容

反射类型

::class取得的是KClass,而::class.java.javaClass取得的是JavaClass。 像suspend这种只在Kotlin里存在的概念,其信息只能通过Kotlin反射(KClass/KFunction等)取得。

val functions = sut::class.declaredMemberFunctions

在反射里可以取得的变量类型有两种。一种是Kotlin的类型(KType),它的泛型参数等信息在JVM上会被擦除,可以用jvmErasure取得擦除后的KClass

sut::class.declaredMemberFunctions
.filter { it.valueParameters[0].type.jvmErasure == String::class }

还有一种是Java的类型。

it.type.javaType

参考:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect.jvm/