20

これが私のクラスです:

public class A{
    private void doIt(int[] X, int[] Y){
       //change the values in X and Y
    }
}

doIt2つの配列を変更するために使用しようとしている別のクラスがあります。コードにエラーがありますが、見つかりません。

public class B{
  public void myStuff(){
    A myA = new A();
    int[] X = {1,2,3,4,5};
    int[] Y = {4,5,6,7,8,9};
    Method doIt = A.class.getDeclaredMethod("doIt",new Object[]{X,Y}); // error
    doIt.setAccessible(true);
    doIt.invoke(myA,new Object[]{X,Y});
  }
}

メソッドを修正する方法について何か助けはありますmyStuffか?

私が使用した場合getDeclaredMethod("doIt",new Object[]{X,Y});、コードはコンパイルされません。

代わりに私が持っている場合getDeclaredMethod("doIt",null);、それは言うNoSuchMethodException

4

3 に答える 3

28

メソッドは 2 つの int 配列で宣言されています

private void doIt(int[] X, int[] Y)

そのメソッドを見つけたい場合は、その引数の型も配置して、同じ名前で異なる型の他のメソッドが見つからないようにする必要があります。

A.class.getDeclaredMethod("doIt", int[].class, int[].class)
于 2012-06-13T19:50:00.840 に答える
4

このdoItメソッドは2 つのパラメーターを取ります。したがって、メソッド名に加えて2 つのパラメーターを に渡す必要がありますClass#getDeclaredMethod()。2 つの追加パラメータは のインスタンスである必要がありますがClassObject[]明らかにそうではありません。具体的には、これらのインスタンスは、受け入れるClassパラメーターの型と同じである必要があります。doIt

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class);
于 2012-06-13T19:47:37.347 に答える
3

そうではないでしょうか?

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class);
于 2012-06-13T19:48:45.110 に答える