Mib*_*bac 0 java reflection kotlin
使用Java的反射时,我可以这样做:
method.getParameterTypes()[i]这给了我参数的i类型(Class).
如何使用Kotlin实现这一目标KCallable?我尝试过做这样的事情:callable.parameters[i].type但我发现的唯一一件事就是type.javaType它返回Type了根本没有帮助我的东西.我也尝试了,parameters[i].kind但这根本没有帮助我.
如何method.getParameterTypes()使用Kotlin 进行Java KCallable?
如果您使用的是Kotlin 1.1+,
1)你有kotlin-reflect,然后你应该使用callable.parameters[i].type.jvmErasure.java.
2)你没有kotlin-reflect,然后去3)
如果您使用的是旧版本,我强烈建议您将代码移植到1.1.如果由于某种原因你必须坚持使用旧的,请转到3),
3)你应该首先添加这段代码,它计算给定的rawtype java.lang.reflect.Type:
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
Run Code Online (Sandbox Code Playgroud)
然后打电话callable.parameters[i].type.javaType.rawtype.
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |