Aufrufen von Funktionen in großen Mengen mit Java Reflection

Rufen Sie die Funktion in einer Variablen durch Reflexion auf.

Die Klasse, die Sie anrufen möchten. Ich mache nur vier Regeln richtig.

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

Wo kann ich anrufen?

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 {
            //Erstellen Sie eine Instanz
            Constructor<?> cons = Calc.class.getConstructor();
            Calc calc = (Calc) cons.newInstance();
            //Registrieren Sie den Funktionsnamen, den Sie verwenden möchten, in der Liste
            List<String> methodNames = new ArrayList<>();
            methodNames.add("plus");
            methodNames.add("minus");
            methodNames.add("multiply");
            methodNames.add("divide");
            //Rufen Sie Funktionen gemeinsam mit dem registrierten Namen auf.
            //Wenn die Signatur des Anrufers unterschiedlich ist, muss die for-Anweisung verzweigt oder getrennt werden.
            for(String methodName : methodNames){
                //Ruft einen Funktionszeiger in einer Methodentypvariablen ab.
                //getMethod(Die oben erstellte Klasseninstanz,1. Argument, 2. Argument, 3. ...) der Funktion, die Sie verwenden möchten
                //Methode1 für so viele Signaturen, wie Sie verwenden möchten,Definieren Sie es als Methode2.
                Method method = (Calc.class.getMethod(methodName,int.class,int.class));
                //Verwendung von Funktionen. Da der Rückgabewert von invoke der Objekttyp ist, wandeln Sie ihn entsprechend der Zielfunktion um.
                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);
        }
        
    }
    
}

Ausgabeergebnis plus = 30 minus = 10 multiply = 200 divide = 2

Verwendung

Dies kann nützlich sein, wenn die Methode als String-Typ angegeben ist. In diesem Beispiel werden Methodennamen einzeln von Hand hinzugefügt. Die Funktionsnamen, die Sie aufrufen möchten, sind Methode1, Methode2, Methode3, Methode4 ... Wenn es eine Seriennummer wie ist

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

Möglicherweise können Sie die Verkürzung des Codes messen, wenn er automatisch so generiert wird.

Recommended Posts

Aufrufen von Funktionen in großen Mengen mit Java Reflection
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
Wie man JAVA in 7 Tagen lernt
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So verketten Sie Zeichenfolgen mit Java
Aufrufen und Verwenden der API in Java (Spring Boot)
Untersucht, wie Dienste mit Watson SDK für Java aufgerufen werden
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
So führen Sie eine Basiskonvertierung in Java durch
So wechseln Sie die Java-Version mit direnv im Terminal auf dem Mac
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
So erhalten Sie das Datum mit Java
[Persönliches Memo] Interaktion mit dem Zufallszahlengenerator in Java
So zeigen Sie eine Webseite in Java an
Verwendung des Java-Frameworks mit AWS Lambda! ??
So erhalten Sie eine Klasse von Element in Java
Verwendung der Java-API mit Lambda-Ausdrücken
So verbergen Sie Nullfelder als Antwort in Java
So lösen Sie Ausdrucksprobleme in Java
Wie schreibe ich Java String # getBytes in Kotlin?
So rufen Sie AmazonSQSAsync auf
Azure funktioniert in Java
Gedanke: Wie man eine funktionale Schnittstelle für eigene Funktionen verwendet (Java)
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
So implementieren Sie UICollectionView mit Code nur in Swift
So sortieren Sie mit SQLite in aufsteigender / absteigender Reihenfolge
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
So wechseln Sie Tomcat context.xml mit Eclipse WTP
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
Verwendung der Z3-Bibliothek in Scala mit Eclipse
[Java] Verschlüsselung mit AES-Verschlüsselung mit Standardbibliothek
So erstellen Sie einen Daten-URI (base64) in Java
[Java] Verweisen Sie auf und setzen Sie private Variablen mit Reflektion
Organisierte schrittweise Interaktion mit dem JDK
[So fügen Sie ein Video mit Rails in haml ein]
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
So verspotten Sie einen Super-Methodenaufruf in PowerMock
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
So konvertieren Sie eine Datei in ein Byte-Array in Java
So verwalten Sie Java EE-Projekte in Eclipse
Abfragen von Arrays in jsonb mit Rails + postgres
Zusammenfassung der Implementierung von Standardargumenten in Java
Wie man altes Java (8er) in macOS 10.15 Catalina einfügt
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Hinweise zur Verwendung regulärer Ausdrücke in Java
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste