我有以下界面:
interface Foo {
void bar(String a, int b);
}
我想Foo.bar
反射地调用(在 Foo 的实现上)。但是,参数在数组中,我不知道它的大小。
以下不起作用:
void gee(Foo someFoo, Method bar, Object[] args) {
bar.invoke(someFoo, args);
}
这不起作用,因为args
编译器将其作为单个参数进行威胁,并且该数组没有“扩展”为 vararg,而是(内部)包装在另一个具有单个元素的数组中,即
@Test
public void varArgTest() {
assertTrue(varArgFoo(new Object[] {1, 2}) == 1);
}
private static <T> int varArgFoo(T... arg) {
return arg.length;
}
在这种情况下,我如何调用Method.invoke()
以使数组受到 vararg 的威胁?
或更一般的问题:当参数在数组中时我如何调用可变参数方法我直到运行时才知道数组的大小。