Kotlin检查参数的类型

当使用Java的反射,我可以做这样的事情: method.getParameterTypes()[i]给我参数的i类型( Class )。

如何使用Kotlin的KCallable来实现这KCallable ? 我试过做这样的事情: callable.parameters[i].type但我发现唯一的事情是type.javaType但它返回Type ,根本没有帮助我。 我也尝试过parameters[i].kind但是这根本没有帮助我。

如何使用Kotlin的KCallable来执行Java的method.getParameterTypes()

如果您使用的是Kotlin 1.1+,

1)你有kotlin-reflect ,那么你应该使用callable.parameters[i].type.jvmErasure.java

2)你没有kotlin-reflect ,然后去3)

如果您使用的是旧版本,我强烈建议您将代码移植到1.1。 如果由于某种原因,你必须坚持较旧的,转到3),

3)你应该首先添加这段代码,它计算给定java.lang.reflect.Type的rawtype:

 import java.lang.reflect.* val Type.rawtype: Class<*> get() = when (this) { is Class<*> -> this is ParameterizedType -> rawType as Class<*> is GenericArrayType -> genericComponentType.rawtype.asArrayType() is TypeVariable<*> -> this.bounds[0]?.rawtype ?: Any::class.java // <--- A bug of smart cast here, forcing the use of "this." is WildcardType -> lowerBounds[0].rawtype else -> throw AssertionError("Unexpected type of Type: " + javaClass) } fun Class<*>.asArrayType() = java.lang.reflect.Array.newInstance(this, 0).javaClass 

然后调用callable.parameters[i].type.javaType.rawtype