Comment utiliser Reflection pour appeler une méthode Java lors de l’exécution

Comment utiliser Reflection pour appeler la méthode Java lors de l'exécution

La réflexion est une approche très utile pour gérer la classe Java lors de l'exécution, elle peut être utilisée pour charger la classe Java, appeler ses méthodes ou analyser la classe lors de l'exécution.

Dans cet exemple, vous allez charger une classe appelée «AppTest» et appeler chacune de ses méthodes à l'exécution.

1. AppTest.java

Cette classe Java et ses méthodes seront appelées au moment de l'exécution plus tard

package com.example.reflection;

public class AppTest{

    private int counter;

    public void printIt(){
        System.out.println("printIt() no param");
    }

    public void printItString(String temp){
        System.out.println("printIt() with param String : " + temp);
    }

    public void printItInt(int temp){
        System.out.println("printIt() with param int : " + temp);
    }

    public void setCounter(int counter){
        this.counter = counter;
        System.out.println("setCounter() set counter to : " + counter);
    }

    public void printCounter(){
        System.out.println("printCounter() : " + this.counter);
    }
}

2. ReflectApp.java

Cette classe chargera la classe «AppTest» et appellera ses méthodes lors de l'exécution. Les codes et commentaires sont explicites.

package com.example.reflection;

import java.lang.reflect.Method;

public class ReflectApp{

    public static void main(String[] args) {

    //no paramater
    Class noparams[] = {};

    //String parameter
    Class[] paramString = new Class[1];
    paramString[0] = String.class;

    //int parameter
    Class[] paramInt = new Class[1];
    paramInt[0] = Integer.TYPE;

    try{
            //load the AppTest at runtime
        Class cls = Class.forName("com.example.reflection.AppTest");
        Object obj = cls.newInstance();

        //call the printIt method
        Method method = cls.getDeclaredMethod("printIt", noparams);
        method.invoke(obj, null);

        //call the printItString method, pass a String param
        method = cls.getDeclaredMethod("printItString", paramString);
        method.invoke(obj, new String("example"));

        //call the printItInt method, pass a int param
        method = cls.getDeclaredMethod("printItInt", paramInt);
        method.invoke(obj, 123);

        //call the setCounter method, pass a int param
        method = cls.getDeclaredMethod("setCounter", paramInt);
        method.invoke(obj, 999);

        //call the printCounter method
        method = cls.getDeclaredMethod("printCounter", noparams);
        method.invoke(obj, null);

    }catch(Exception ex){
        ex.printStackTrace();
    }
   }
}

3. Sortie

printIt() no param
printIt() with param String : example
printIt() with param int : 123
printCounter() : 999