2012-06-13 14 views
14

Aquí es mi clase:¿Cómo uso la reflexión para invocar un método con parámetros?

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

tengo otra clase que está tratando de utilizar doIt modificar dos matrices. Tengo un error en mi código pero no puedo encontrarlo.

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

Cualquier ayuda sobre cómo solucionar el método myStuff?

Si uso getDeclaredMethod("doIt",new Object[]{X,Y});, el código no se compila.

Si en cambio tengo getDeclaredMethod("doIt",null);, entonces dice NoSuchMethodException.

Respuesta

16

Su método se declara con dos matrices int

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

y si Wan para encontrar ese método también tiene que poner sus tipos de argumento para evitar encontrar otro método con el mismo nombre pero diferentes tipos.

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

¡Muchas gracias! +1 – kasavbere

4

El método doIt toma dos parámetros. En consecuencia, debe pasar dos parámetros, además del nombre del método, al Class#getDeclaredMethod(). Los dos parámetros adicionales deben ser instancias de Class, que obviamente no es Object[]. Específicamente, esas instancias Class deben ser las mismas que los tipos de los parámetros que acepta doIt.

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

Gracias MUCHO! +1 – kasavbere

3

¿No debería ser?

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

¡Muchas gracias MUCHO! +1 – kasavbere

Cuestiones relacionadas