Nehmen Sie, was Sie über Java-Reflexion gelernt haben

Motivation

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.

Was ist Reflexion?

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.

Wie Java Reflection funktioniert

Der Reflexionsmechanismus von Java wird durch die Verwendung der folgenden zwei Klassen und Funktionen ermöglicht.

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 " für String ausgedrückt. Diese Klasse ist etwas Besonderes und kann nicht mit "neu" usw. instanziiert werden. Stattdessen wird es von der JVM beim Laden der Klasse generiert oder automatisch durch Aufrufen der defineClass-Methode des Klassenladeprogramms erstellt. In Java ist es möglich, Typinformationen vom generierten Class-Objekt abzurufen.

Klassenlader

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.

Versuchen Sie, mithilfe von Reflection auf die Klasseninformationen zuzugreifen.

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

Versuchen Sie, die Methode aufzurufen.

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

Impressionen

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.

Nachschlagewerke & Websites

Recommended Posts

Nehmen Sie, was Sie über Java-Reflexion gelernt haben
Was ich über Java 8 recherchiert habe
Was ich über Java 6 recherchiert habe
Was du über Hashing gelernt hast
Was ich über Java 9 recherchiert habe
Was Sie über Symbole gelernt haben
Was ich über Java 7 recherchiert habe
[Android / Java] Erfahren Sie mehr über DataBinding
Was ich über Kotlin gelernt habe
Was ich über Java 5 recherchiert habe
Was ich mit Java Gold gelernt habe
Was ich mit Java Silver gelernt habe
Was ich über Java-Lernen recherchiert habe
Was ich aus der Java-Geldberechnung gelernt habe
[Java] Informationen zu Java 12-Funktionen
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
Was ist java
[Java] Über Arrays
Etwas über Java
Wo ist mit Java?
Informationen zu Java-Funktionen
Was ist Java <>?
Über Java-Threads
[Java] -Schnittstelle
Was ich in Java gelernt habe (Teil 2) Was sind Variablen?
Was ist java
Was ich gelernt habe
Über die Java-Klasse
Informationen zu Java-Arrays
Über Java-Vererbung
Über Schnittstelle, Java-Schnittstelle
Über Java Var
Über Java Literal
Informationen zu Java-Befehlen
Ich werde sowieso schreiben, was ich über Docker gelernt habe (zweite)
Was ich in Java gelernt habe (Teil 3) Anweisung zur Ausführung von Anweisungen
Was ich beim Erstellen eines Servers in Java gelernt habe
Ich werde sowieso schreiben, was ich über Docker gelernt habe (zuerst)
Informationen zur Java-Protokollausgabe
Informationen zur Java-Funktionsschnittstelle
Über die Klassenteilung (Java)
Über [Java] [StreamAPI] allMatch ()
Informationen zur Bindung von Java-Methoden
[Java] Über anonyme Klassen
Informationen zu Aufteilungsmethoden (Java)
Was ist Java-Kapselung?
[Java Silver] Informationen zur Initialisierung
Was ich gelernt habe ② ~ Mock ~
Informationen zur Java-Array-Liste
Über Java-Polymorphismus super ()
Was ich gelernt habe ~ ~ DJUnit ~
Informationen zur Vererbung (Java Silver)
Informationen zur Java String-Klasse
Informationen zu Java-Zugriffsmodifikatoren
Über Java-Lambda-Ausdrücke
Was ist Java-Technologie?
Informationen zu Java-Einstiegspunkten
Java 10 Docker-Unterstützung
Persönliche Zusammenfassung über Java
Was ist Java API-Java?