簡體   English   中英

如何在 Kotlin 中使用可變參數(參數數量)和反射

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM