在Kotlin中通过反思调用方法的习惯性方法

我有一段Kotlin代码试图反思地调用一个使用Java的Reflection包的方法:

val arguments = arrayOfNulls<Any>(numberOfParams) // Populate arguments try { fooMethod.invoke(fooClass, arguments) } catch (e: Exception) { // Panic } 

它保持与“错误的参数数量IllegalArgumentException”失败。

我在这个问题上做了一些阅读,看来invoke()方法的spread操作符拒绝拆开Array<Any>因为它不等于Object[] 。 我可以尝试使用来自Java的标准Object[] ,但这让我怀疑,这是唯一的方法吗? 这是最好的方法吗? 有什么方法可以用Kotlin的类型来做到这一点?

什么是最实现的方式来达到我想要的Kotlin?

您需要将扩展​​运算符*添加到您的呼叫中:

 fooMethod.invoke(fooClass, *arguments) 

使用不加前缀的arguments *将导致一个长度为1的新数组包含arguments作为其单个元素被创建并作为args传递给invoke 。 用扩展运算符前缀它将导致arguments数组作为args传递以invoke

请参阅可变数量的参数(可变参数) – 函数 – Kotlin编程语言的更多详细信息。