我有这个方法(在java中):
public void insert(final MyCustomObject... obj)
我知道 MyCustomObject
的包名称和类名称以及方法名称,因此我在反射期间使用它(使用 Kotlin):
val myCustomObjectClass = Class.forName("${packageName}${className}")
val myCustomObject = myCustomObjectClass.getConstructor(String::class.java, Long::class.java)
val insertMethod = classContainingInsertMethod.getDeclaredMethod("insert", myCustomObjectClass)
类classContainingInsertMethod
是之前创建的。现在,我如何调用该方法?我有一个异常(exception),没有这样的方法。我知道这一点,因为它是多个参数,而不是单个参数。
我尝试使用arrayOf(myCustomObjectClass)::class.java
但这给了我另一个异常(exception)。使用 *myCustomObjectClass
也不起作用。
最佳答案
import java.lang.reflect.Array
val varArg = Array.newInstance(myCustomObjectClass, 1)
val varArgClass = varArg::class.java
val myCustomObjectConstructor = myCustomObjectClass.getConstructor(String::class.java, Long::class.java)
val myCustomObjectElement = myCustomObjectConstructor.newInstance("", 0L)
Array.set(varArg, myCustomObjectElement, 0)
(这里数组的大小和 set
调用的数量将对应于您想要在可变参数中传递的参数数量),然后
val insertMethod = classContainingInsertMethod.getDeclaredMethod("insert", varArgClass)
insertMethod.invoke(instanceOfClassContainingInsertMethod, varArg)
关于java - 如何在 Kotlin 中使用 varargs(参数数量)和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856651/