【发布时间】:2020-11-23 00:09:06
【问题描述】:
当试图动态(反射)调用数组类型的迭代器函数时
@Test
fun test_x() {
val array: Array<String> = arrayOf("A", "B")
val f: KFunction<*> = array::class.memberFunctions.filter { it.name == "iterator" && it.isOperator }.first()
KotlinReflectionUtils.functionJsonInfo(f).printJson()
val result = f.call(array)
println(result)
}
KotlinReflectionUtils.functionJsonInfo(f).printJson() 是带有以下输出的调试行
{
"name" : "iterator",
"returnType" : "kotlin.collections.Iterator<T>",
"parameters" : [ {
"index" : 0,
"name" : null,
"type" : {
"toString()" : "kotlin.Array<T>",
"classifier" : "class kotlin.Array"
},
"java_class" : "kotlin.reflect.jvm.internal.KParameterImpl",
"optional?" : false,
"vararg?" : false,
"isValue?" : false
} ],
"instance_receiver_parameter" : {
"index" : 0,
"name" : null,
"type" : {
"toString()" : "kotlin.Array<T>",
"classifier" : "class kotlin.Array"
},
"java_class" : "kotlin.reflect.jvm.internal.KParameterImpl",
"optional?" : false,
"vararg?" : false
},
"visibility" : "public",
"external?" : false,
"infix?" : false,
"inline?" : false,
"operator?" : true,
"isFinal?" : true,
"suspend?" : false
}
val result = f.call(array) 抛出以下异常
kotlin.reflect.jvm.internal.KotlinReflectionInternalError: 无法计算函数的调用者: public final operator fun iterator(): kotlin.collections.Iterator defined in kotlin.Array[DeserializedSimpleFunctionDescriptor@1199fe66] (member = null)
【问题讨论】:
标签: kotlin reflection iterator runtime operator-keyword