检查类是否为KParameter的有效值

时间:2017-07-01 20:18:01

标签: kotlin kotlin-reflect

给出以下示例代码

fun function(text: CharSequence) {
    println(text)
}

val textParam = ::function.parameters[0]
val stringClass = String::class

如何检查textParam是否接受stringClass作为参数?

1 个答案:

答案 0 :(得分:2)

您可以使用KClass执行以下操作:

val paramClass = ::function.parameters[0].type.jvmErasure

println(stringClass.isSubclassOf(paramClass))

或者,另一个检查KType的解决方案:

val paramType = ::function.parameters[0].type

println(stringClass.starProjectedType == paramType ||  // type is String
        stringClass.allSupertypes.contains(paramType)) // type is a supertype of String