2012-06-13 1 views
14

Hier ist meine Klasse:Wie verwende ich Reflection, um eine Methode mit Parametern aufzurufen?

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

Ich habe eine andere Klasse, die doIt zu verwenden versucht, zwei Arrays zu ändern. Ich habe einen Fehler in meinem Code, kann ihn jedoch nicht finden.

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}); 
    } 
} 

Irgendwelche Hilfe, wie man Methode myStuff repariert?

Wenn ich 10 verwende, kompiliert der Code nicht.

Wenn ich stattdessen habe getDeclaredMethod("doIt",null); dann heißt es NoSuchMethodException.

Antwort

16

Ihre Methode ist mit zwei int-Arrays deklariert

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

und wenn Sie wan diese Methode finden Sie auch die Argumenttypen setzen müssen, um die Suche nach anderen Verfahren mit dem gleichen Namen zu verhindern, sondern verschiedenen Typen.

A.class.getDeclaredMethod("doIt", int[].class, int[].class) 
+0

Vielen Dank Ihnen! +1 – kasavbere

4

Die Methode doIt dauert zwei Parameter. Folglich müssen Sie neben dem Methodennamen zwei Parameter an Class#getDeclaredMethod() übergeben. Die zwei zusätzlichen Parameter müssen Instanzen von Class sein, was offensichtlich kein Object[]ist. Insbesondere müssen diese Class Instanzen die gleichen sein wie die Typen der Parameter, die doIt akzeptiert.

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class); 
+0

Danke Ihnen SEHR! +1 – kasavbere

3

Sollte es nicht sein?

Method doIt = A.class.getDeclaredMethod("doIt", int[].class, int[].class); 
+0

Danke Ihnen sehr! +1 – kasavbere