2017-08-08 5 views
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配列が可変引数として、コンパイラによって見られている

感謝

+2

テストに便利なコンパイラはありませんが、 'String []'が単一の要素ではなく 'Object ...'引数全体として渡されている可能性があります。 'method.invoke(myClassInstance、new Object [] {new String [] {" a "、" b "}}); ' –

+0

これがうまくいった。あなたは説明がありますか? – Mehdi

+0

これはちょうどJavaの仕組みで、 'foo(a、b、c)'や 'foo(new Object [] {a、b、c})としてvarargs関数' foo(Object ... x) ) '。コンパイラは、コードを後者のコードとして解釈します。これを前者と解釈させるには、ボイラープレートを手動で追加する必要があります。 –

答えて

1

。次に、あなたの呼び出しメソッドは、文字列配列の代わりにパラメータとして渡された2 Stringを見ています。

関連する問題