kotlin反映和vararg

我试图用kotlin替换Java,但是可变参数的传输有问题。

测试在Java中传递

public class ExampleUnitTest1 { @Test public void test() { a(1, 2); } public void a(Object... args) { b(args); } public void b(Object... args) { Class clazz1 = ExampleUnitTest1.class; try { Method method = clazz1.getMethod("add", Integer.class, Integer.class); method.invoke(this, args); } catch (Exception e) { e.printStackTrace(); } } public void add(Integer a, Integer b) { System.out.println(a + b); } } 

但在kotlin测试失败

 class ExampleUnitTest { @Test fun test() { a(1, 2) } fun a(vararg args: Any) { b(args) } fun b(vararg args: Any) { val clazz1 = ExampleUnitTest::class.java val method = clazz1.getMethod("add", Int::class.java, Int::class.java) method.invoke(this, args) // also failed to replace with args[0] } fun add(a: Int, b: Int) { println(a + b) } } 

你可能想用b(*args)method.invoke(this, args)替换b(args)method.invoke(this, *args)*是扩展运算符 ,可用于将大小为n的数组(在本例中为args )分解为大小为n可变长度n

这是必须的,因为你可能还想传入名为args的数组作为唯一的参数而不是其内容。 我不确定Java代码是否也被破坏了,但是测试通过了catch块。

顺便说一句,请描述你下一次更详细的错误。 说明你实际上有什么问题,以及你期望的行为,而不是给我们一些代码。