我有一段Kotlin代码,试图使用Java的Reflection包来反射地调用方法:
val arguments = arrayOfNulls<Any>(numberOfParams)
// Populate arguments
try {
fooMethod.invoke(fooClass, arguments)
} catch (e: Exception) {
// Panic
}
Run Code Online (Sandbox Code Playgroud)
IllegalArgumentException为“错误的参数数量”时,它总是失败。
我对此问题进行了一些阅读,似乎该invoke()
方法的传播运算符拒绝解压缩,Array<Any>
因为它不等效于Object[]
。我可以尝试使用Object[]
Java中的标准,但这使我感到奇怪,这是唯一的方法吗?这是最好的方法吗?我可以用Kotlin的类型做到这一点吗?
在Kotlin中实现我想要的最理想的方式是什么?
您需要*
在呼叫中添加点差运算符:
fooMethod.invoke(fooClass, *arguments)
Run Code Online (Sandbox Code Playgroud)
使用arguments
不带前缀的情况*
将导致创建长度为1的新数组,该数组包含arguments
作为其单个元素,并以形式传递args
给invoke
。使用spread运算符对其进行前缀会使该arguments
数组invoke
作为as 传递args
。
有关更多详细信息,请参见可变参数数目(Varargs)-函数-Kotlin编程语言。
归档时间: |
|
查看次数: |
2226 次 |
最近记录: |