método de la clase de invocación interior que tiene parámetros utilizando la reflexión

Shree:

Estoy tratando de probar mi código, aunque sabiendo utilizando la reflexión no es una buena manera de prueba. Tengo una clase externa como de clase interna pública y privada con un método público como abajo,

public class Outer {

    private class Inner {
        private int var = 1;

        public Inner(int a) {
            System.out.println("___");
        }

        public void test(int a) {
            System.out.println("Hey");
        }
    }
}

Mis principales miradas de clase Java, como más adelante

main() {
    Outer b = new Outer();
    System.out.println(b);
    Class<?> innerClass = Class.forName("car.Outer$Inner");

    Constructor<?> constructor = innerClass.getDeclaredConstructor(Outer.class, 1);

    constructor.setAccessible(true);
    Object c = constructor.newInstance(b,b);

    Method method = c.getClass().getDeclaredMethod("test");
    method.setAccessible(true);
    method.invoke(c, 1);
}

Este es el lanzamiento

Excepción en el hilo java.lang.NoSuchMethodException "principal": car.Outer $ Inner.test () en java.lang.Class.getDeclaredMethod (Class.java:2130) en car.A.main (A.java:36)

Cómo invocar el método clase interna teniendo parámetro utilizando la reflexión?

Ted salto:

Debe suministrar la clase de argumento (s) en la llamada a getDeclaredMethod(). Cuando se llama getDeclaredMethod(), el primer argumento es el nombre del método que desea levantó la vista y argumentos restantes son las clases del argumento (s) para el método que desee. Así es como getDeclaredMethod()se distingue entre nombres de los métodos sobrecargados para obtener un método particular. Puesto que usted ha suministrado sin argumentos adicionales, getDeclaredMethod()se busca un método llamado testque no tiene argumentos. Que está recibiendo una excepción porque no tiene tal método en la clase Outer$Inner. El único testmétodo que no tiene una toma intparameter`, por lo que el siguiente debe hacer lo que quiera:

Method method = c.getClass().getDeclaredMethod("test", int.class);

Aquí, int.classes el Classobjeto correspondiente al tipo de argumento primitiva int.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=218492&siteId=1
Recomendado
Clasificación