Reflection 通过Kotlin中的反射调用方法的惯用方法
我有一段Kotlin代码,它试图使用Java的反射包反射调用一个方法: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) //
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的新数组,其中包含参数
作为其单个元素,并作为参数
传递给调用
。在它前面加上扩展运算符会导致参数
数组作为参数
传递给调用
有关更多详细信息,请参阅。请检查这个答案是否有用:我现在感觉自己像个白痴,因为我记得这个操作员存在,但我完全忘记了。有时候一个男人只需要一点推动。非常感谢。