反射类型
::class取得的是KClass,而::class.java和.javaClass取得的是Java的Class。
像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/