Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reflection 通过Kotlin中的反射调用方法的惯用方法_Reflection_Kotlin - Fatal编程技术网

Reflection 通过Kotlin中的反射调用方法的惯用方法

Reflection 通过Kotlin中的反射调用方法的惯用方法,reflection,kotlin,Reflection,Kotlin,我有一段Kotlin代码,它试图使用Java的反射包反射调用一个方法: val arguments = arrayOfNulls<Any>(numberOfParams) // Populate arguments try { fooMethod.invoke(fooClass, arguments) } catch (e: Exception) { // Panic } val arguments=arrayOfNulls(numberOfParams) //

我有一段Kotlin代码,它试图使用Java的反射包反射调用一个方法:

val arguments = arrayOfNulls<Any>(numberOfParams)

// Populate arguments

try {
    fooMethod.invoke(fooClass, arguments)
} catch (e: Exception) {
    // Panic
}
val arguments=arrayOfNulls(numberOfParams)
//填充参数
试一试{
调用(fooClass,参数)
}捕获(e:例外){
//恐慌
}
它不断失败,出现“参数数量错误”的IllegalArgumentException

我对这个问题做了一些阅读,似乎
invoke()
方法的spread操作符拒绝解包
Array
,因为它不等同于
Object[]
。我可以尝试使用Java中的标准
对象[]
,但这让我想知道,这是唯一的方法吗?这是最好的方式吗?有什么方法可以让我用Kotlin的类型来做吗


在Kotlin中实现我想要的最自动化的方法是什么?

您需要在通话中添加扩展运营商
*

fooMethod.invoke(fooClass, *arguments)
使用
参数
而不在其前面加
*
将导致创建一个长度为1的新数组,其中包含
参数
作为其单个元素,并作为
参数
传递给
调用
。在它前面加上扩展运算符会导致
参数
数组作为
参数
传递给
调用


有关更多详细信息,请参阅。

请检查这个答案是否有用:我现在感觉自己像个白痴,因为我记得这个操作员存在,但我完全忘记了。有时候一个男人只需要一点推动。非常感谢。