Java verfügt über eine Funktion namens Reflection, um die Typinformationen eines Objekts abzurufen. Ich kannte den Namen und die Gliederung bisher, aber ich wollte es richtig wissen, also werde ich es zusammenfassen.
Mit Java können Sie zur Laufzeit Typinformationen dynamisch abrufen und bearbeiten. In der Informationstechnik wird die Technologie des Lesens oder Umschreibens der Struktur des Programms selbst während der Ausführung des Programms als Reflexion bezeichnet. Java Reflection bietet hauptsächlich die folgenden Funktionen.
Freywork und andere verwenden diese Reflexion, um auf Felder und Aufrufmethoden zuzugreifen.
Der Reflexionsmechanismus von Java wird durch die Verwendung der folgenden zwei Klassen und Funktionen ermöglicht.
java.lang.Class
java.lang.Class
Java bietet eine Klasse namens "java.lang.Class", die eine Klasse darstellt. Jede im Quellcode behandelte Klasse oder Schnittstelle verfügt über ein entsprechendes Klassenobjekt. Dies wird beispielsweise als "Klasse
Ein Klassenladeprogramm ist ein Objekt, das buchstäblich die Rolle des Ladens einer Klasse hat. Wenn Sie das Class-Objekt aus dem Quellcode abrufen, erhalten Sie es intern von diesem Klassenladeprogramm.
Es ist so einfach, aber ich würde gerne Reflexion verwenden. Bereiten Sie zunächst die folgende einfache Klasse vor.
public class Foo {
Foo(String name){
this.name = name;
}
private String name;
public void greet(){
System.out.println("Hello, " + name);
}
}
Rufen wir "Foo # greet ()" auf, indem wir die obige "Foo.class" -Klasse reflektieren.
import java.lang.reflect.Method;
public class ReflectionSample {
public static void main(String[] args) {
Class<Foo> fooClazz1 = Foo.class;
Foo foo = new Foo("taro");
try {
Method greetMethod = fooClazz1.getMethod("greet");
greetMethod.invoke(foo);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
}
}
Ein Methodenaufruf für eine Klasse wird mit java.lang.reflect.Method # invoke
durchgeführt.
Die Method
Klasse kann von Class # getMethod
bezogen werden. Geben Sie in diesem Fall den Namen der Methode an, die Sie aufrufen möchten.
Dieses Mal hat Foo # greet ()
kein Argument, aber Sie können das Argument der Methode übergeben, die nach dem zweiten Argument aufgerufen werden soll.
Ausführungsergebnis
Hello, taro
Normalerweise verwende ich es nicht beim Schreiben von Geschäftsanwendungen, aber ich dachte, dass ich beim Lesen des Codes des Frameworks etwas darüber wissen könnte.
Recommended Posts