[英]How to work with varargs (number of arguments) and reflection in Kotlin
我有這個方法(在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
是較早創建的。 現在,我如何調用該方法? 我有一個例外,沒有這樣的方法。 我知道這一點,因為它是許多參數,而不是一個。
我嘗試使用arrayOf(myCustomObjectClass)::class.java
但這給了我另一個例外。 使用*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
調用的數量將對應於您要在 varargs 中傳遞的參數數量)然后
val insertMethod = classContainingInsertMethod.getDeclaredMethod("insert", varArgClass)
insertMethod.invoke(instanceOfClassContainingInsertMethod, varArg)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.