gpt4 book ai didi

java - 当数组中的参数时调用 Method.invoke()

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:30:00 25 4
gpt4 key购买 nike

我有以下界面:

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 方法我直到运行时才知道数组的大小。

最佳答案

可变参数实际上是一个带有一些额外元数据的数组参数。所以当你使用Method.invoke时,你需要将数组包裹在另一个数组中:

Object[] varargs = new Object[] { 10, 20 };
Object argumentArray = new Object[] { varargs };
method.invoke(target, argumentArray);

关于java - 当数组中的参数时调用 Method.invoke(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com