0
次のコードを使用してプライベートメソッドを呼び出そうとします。しかし、私はIllegalArgumentExceptionを取得します。リフレクトを使用して、パラメータの配列としてStringの配列を持つプライベートメソッドを呼び出す方法
java.lang.IllegalArgumentExceptionが:引数の間違った番号は
コードは次のとおり
Method method = MyClass.class.getDeclaredMethod("myMethod", String[].class);
method.setAccessible(true);
method.invoke(myClassInstance, new String[] { "a", "b" });
呼び出されるメソッドのシグネチャは、次のとおり
private void myMethod(String[] args)
I同じ例を試みましたが、パラメータとしてStringをとるメソッドでうまくいきました。 String配列が可変引数として、コンパイラによって見られている
感謝
テストに便利なコンパイラはありませんが、 'String []'が単一の要素ではなく 'Object ...'引数全体として渡されている可能性があります。 'method.invoke(myClassInstance、new Object [] {new String [] {" a "、" b "}}); ' –
これがうまくいった。あなたは説明がありますか? – Mehdi
これはちょうどJavaの仕組みで、 'foo(a、b、c)'や 'foo(new Object [] {a、b、c})としてvarargs関数' foo(Object ... x) ) '。コンパイラは、コードを後者のコードとして解釈します。これを前者と解釈させるには、ボイラープレートを手動で追加する必要があります。 –