Comment appeler des fonctions en bloc avec la réflexion Java

Appelez la fonction dans une variable par réflexion.

La classe que vous souhaitez appeler. Je fais juste quatre règles correctement.

Calc.java


package refrectiontest;

public class Calc {

    public int plus(int a, int b) {
        return a + b;
    }
        public int minus(int a, int b) {
        return a - b;
    }
        public int multiply(int a, int b) {
        return a * b;
    }
        public int divide(int a, int b) {
        return a / b;
    }
        
}

Où appeler.

RefrectionTest.java


package refrectiontest;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


public class RefrectionTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            //Créer une instance
            Constructor<?> cons = Calc.class.getConstructor();
            Calc calc = (Calc) cons.newInstance();
            //Enregistrez le nom de la fonction que vous souhaitez utiliser dans la liste
            List<String> methodNames = new ArrayList<>();
            methodNames.add("plus");
            methodNames.add("minus");
            methodNames.add("multiply");
            methodNames.add("divide");
            //Appelez les fonctions collectivement avec le nom enregistré.
            //Si la signature de l'appelant est différente, il est nécessaire de créer une branche à l'intérieur ou de séparer l'instruction for.
            for(String methodName : methodNames){
                //Obtenez un pointeur de fonction dans une variable de type Method.
                //getMethod(Instance de classe créée ci-dessus,1er argument, 2ème argument, 3ème ...) de la fonction que vous souhaitez utiliser
                //Méthode 1 pour autant de signatures que vous souhaitez utiliser,Définissez-le comme méthode2.
                Method method = (Calc.class.getMethod(methodName,int.class,int.class));
                //Utilisation des fonctions. La valeur de retour de invoke étant de type Object, transtypez-la en fonction de la fonction cible.
                int result = (int)method.invoke(calc,20,10);
                System.out.println(methodName + " = " + result );

            }

        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException ex) {
            Logger.getLogger(RefrectionTest.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
}

Résultat de sortie plus = 30 minus = 10 multiply = 200 divide = 2

Usage

Cela peut être utile lorsque la méthode est spécifiée en tant que type String. Dans cet exemple, les methodNames sont ajoutés un par un à la main, Les noms de fonction que vous souhaitez appeler sont méthode1, méthode2, méthode3, méthode4 ... S'il s'agit d'un numéro de série comme

for(int i = 1;i<10;i++){
    "method" + String.valuOf(i) ;
}

Vous pourrez peut-être mesurer le raccourcissement du code s'il est généré automatiquement de cette manière.

Recommended Posts

Comment appeler des fonctions en bloc avec la réflexion Java
Comment supprimer des images non balisées en masse avec Docker
Comment apprendre JAVA en 7 jours
Comment utiliser les classes en Java?
Comment nommer des variables en Java
Comment concaténer des chaînes avec Java
Comment appeler et utiliser l'API en Java (Spring Boot)
A étudié comment appeler des services avec Watson SDK pour Java
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Comment faire une conversion de base en Java
Comment changer de version Java avec direnv dans le terminal sur Mac
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
Comment obtenir la date avec Java
[Mémo personnel] Comment interagir avec le générateur de nombres aléatoires en Java
Comment afficher une page Web en Java
Comment utiliser le framework Java avec AWS Lambda! ??
Comment obtenir une classe depuis Element en Java
Comment utiliser l'API Java avec des expressions lambda
Comment masquer les champs nuls en réponse en Java
Comment résoudre les problèmes d'expression en Java
Comment écrire Java String # getBytes dans Kotlin?
Comment appeler AmazonSQSAsync
Fonctions Azure en Java
Réflexion: Comment utiliser une interface fonctionnelle pour vos propres fonctions (java)
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
Comment implémenter UICollectionView avec du code uniquement dans Swift
Comment trier par ordre croissant / décroissant avec SQLite
Comment créer un environnement Java en seulement 3 secondes
[Java] Comment omettre le constructeur privé dans Lombok
Comment basculer Tomcat context.xml avec Eclipse WTP
[Java] Comment omettre l'injection de constructeur de ressort avec Lombok
Comment déployer Java sur AWS Lambda avec Serverless Framework
Comment entrer / sortir des fichiers mainframe IBM en Java?
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
[Java] Comment chiffrer avec le chiffrement AES avec une bibliothèque standard
Comment créer un URI de données (base64) en Java
[Java] Se référer et définir des variables privées avec réflexion
Organisé comment interagir avec le JDK par étapes
[Comment insérer une vidéo dans un hameau avec Rails]
Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
Comment se moquer d'un appel de super méthode dans PowerMock
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment créer un environnement de développement Java avec VS Code
Comment convertir un fichier en tableau d'octets en Java
Comment Git gérer les projets Java EE dans Eclipse
Comment interroger Array dans jsonb avec Rails + postgres
Résumé de la mise en œuvre des arguments par défaut en Java
Comment mettre l'ancien Java (série 8) dans macOS 10.15 Catalina
[Java] Comment rompre une ligne avec StringBuilder
Remarques sur l'utilisation des expressions régulières en Java
Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste