私は次のインターフェースを持っています:
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 に「展開」されず、単一の要素を持つもう 1 つの配列に (内部的に) ラップされるため、これは機能しません。
@Test
public void varArgTest() {
assertTrue(varArgFoo(new Object[] {1, 2}) == 1);
}
private static <T> int varArgFoo(T... arg) {
return arg.length;
}
Method.invoke()
この場合、配列がvarargとして脅かされるようにするにはどうすればよいですか?
または、より一般的な質問: 引数が配列にあるときに vararg メソッドを呼び出すにはどうすればよいですか? 実行時まで配列のサイズがわかりません。