You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何引用Java可变长参数类型用于反射调用?

Kotlin 反射匹配 Java 可变长参数类型方案

Java 语法中的可变长参数 T... 本质是编译期语法糖,最终会被编译为 T[] 数组类型,因此反射查找方法时直接传入对应数组的 Class 对象即可完成匹配。

针对你需要的 String... 类型,空缺位置直接填入 Array<String>::class.java 即可,修正后的完整代码如下:

val method: Method = SomeActivity::class.java.getDeclaredMethod(
            "someMethod",
            Int::class.java,
            Int::class.java,
            Array<String>::class.java
        )
method.isAccessible = true
// 单参数调用
method.invoke(activity, 0, 0, "test")
// 多参数调用,传入数组即可
method.invoke(activity, 0, 0, arrayOf("test1", "test2"))

注意事项

  • 如果要匹配基本类型的可变长参数(比如 int...、long...),需要使用 Kotlin 对应基本类型专属数组的 Class 对象:比如 int... 对应 IntArray::class.java,不可误用 Array<Int>::class.java,后者对应 Java 的 Integer[] 包装类型数组,无法匹配基本类型的可变长参数。
  • 调用 invoke 执行方法时,可变长参数位置既可以直接传入单个对应类型的对象,也可以传入对应类型的数组来传递多个参数。

内容的提问来源于stack exchange,提问作者PhantomThief

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:48:04