Prenez ce que vous avez appris sur la réflexion Java

motivation

Java a une fonctionnalité appelée réflexion pour obtenir les informations de type d'un objet. Je connaissais le nom et le plan jusqu'à présent, mais je voulais le connaître correctement, alors je vais le résumer.

Qu'est-ce que la réflexion?

Java vous permet de récupérer et de manipuler dynamiquement les informations de type lors de l'exécution. En ingénierie de l'information, la technologie de lecture ou de réécriture de la structure du programme lui-même en cours d'exécution du programme est appelée réflexion. La réflexion Java fournit principalement les fonctions suivantes.

Freywork et d'autres utilisent cette réflexion pour accéder aux champs et aux méthodes d'appel.

Comment fonctionne la réflexion Java

Le mécanisme de réflexion de Java est rendu possible en utilisant les deux classes et fonctions suivantes.

java.lang.Class Java fournit une classe appelée java.lang.Class qui représente une classe. Chaque classe ou interface gérée dans le code source a un objet Class correspondant. Cela s'exprime par exemple par «Classe » pour String. Cette classe est spéciale et ne peut pas être instanciée en utilisant new etc. Au lieu de cela, il est généré par la JVM lors du chargement de la classe ou automatiquement construit en appelant la méthode defineClass du chargeur de classe. En Java, il est possible d'obtenir des informations de type à partir de l'objet Class généré.

Chargeur de classe

Un chargeur de classe est un objet qui a littéralement le rôle de charger une classe. Lorsque vous obtenez l'objet Class à partir du code source, vous l'obtiendrez en interne à partir de ce chargeur de classe.

Essayez d'accéder aux informations de la classe en utilisant la réflexion.

C'est si simple, mais j'aimerais utiliser la réflexion. Tout d'abord, préparez le cours simple suivant.

public class Foo {
	
	Foo(String name){
		this.name = name;
	}
	
	private String name;
	
	public void greet(){
		System.out.println("Hello, " + name);
	}
}

Essayez d'appeler la méthode.

Appelons Foo # greet () en utilisant la réflexion sur la classe Foo.class ci-dessus.

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

Un appel de méthode pour une classe est effectué en utilisant java.lang.reflect.Method # invoke. La classe Method peut être obtenue à partir de Class # getMethod. Dans ce cas, spécifiez le nom de la méthode que vous souhaitez appeler. Cette fois, «Foo # greet ()» n'a pas d'argument, mais vous pouvez passer l'argument de la méthode à appeler après le deuxième argument.

Résultat d'exécution

Hello, taro

Impressions

Je ne l'utilise généralement pas lors de l'écriture d'applications professionnelles, mais j'ai pensé que je pourrais avoir des connaissances à ce sujet lors de la lecture du code du framework.

Ouvrages de référence et sites

Recommended Posts

Prenez ce que vous avez appris sur la réflexion Java
Ce que j'ai recherché sur Java 8
Ce que j'ai recherché sur Java 6
Ce que vous avez appris sur le hachage
Ce que j'ai recherché sur Java 9
Ce que vous avez appris sur les symboles
Ce que j'ai recherché sur Java 7
[Android / Java] En savoir plus sur DataBinding
Ce que j'ai appris sur Kotlin
Ce que j'ai recherché sur Java 5
Ce que j'ai appris avec Java Gold
Ce que j'ai appris avec Java Silver
Ce que j'ai recherché sur l'apprentissage Java
Ce que j'ai appris du calcul monétaire Java
[Java] À propos des fonctionnalités de Java 12
Résumé de ce que j'ai appris sur Spring Boot
Qu'est-ce que 'java
[Java] À propos des tableaux
Quelque chose à propos de java
Où est Java
À propos des fonctionnalités Java
Qu'est-ce que Java <>?
À propos des threads Java
Interface [Java]
Ce que j'ai appris en Java (partie 2) Que sont les variables?
Qu'est-ce que 'java
Ce que j'ai appris
À propos de la classe Java
À propos des tableaux Java
À propos de l'héritage Java
À propos de l'interface, interface java
À propos de Java Var
À propos de Java Literal
À propos des commandes Java
J'écrirai quand même ce que j'ai appris sur docker (deuxième)
Ce que j'ai appris en Java (partie 3) Déclaration d'exécution des instructions
Ce que j'ai appris lors de la création d'un serveur en Java
J'écrirai de toute façon ce que j'ai appris sur docker (en premier)
À propos de la sortie du journal Java
À propos de l'interface fonctionnelle Java
À propos de la division de classe (Java)
À propos de [Java] [StreamAPI] allMatch ()
À propos de la liaison de méthode Java
[Java] À propos des classes anonymes
A propos des méthodes de fractionnement (Java)
Qu'est-ce que l'encapsulation Java?
[Java Silver] À propos de l'initialisation
Ce que j'ai appris ② ~ Mock ~
A propos de la liste des baies Java
À propos du polymorphisme Java Super ()
Ce que j'ai appris ① ~ DJUnit ~
À propos de l'héritage (Java Silver)
À propos de la classe Java String
À propos des modificateurs d'accès Java
À propos des expressions Java lambda
Qu'est-ce que la technologie Java?
À propos des points d'entrée Java
Prise en charge de Java 10 Docker
Résumé personnel sur Java
Qu'est-ce que Java API-java