La réflexion en Java est un concept puissant qui permet à un programme Java d'examiner et de modifier son propre comportement à la volée. L'utilisation de la réflexion peut rendre un programme plus flexible et adaptable, car il peut s'ajuster dynamiquement en fonction des conditions à l'exécution.
En utilisant la réflexion, votre programme peut récupérer des informations sur ses classes, ses interfaces, ses champs et ses méthodes à l'exécution, sans connaître leurs noms à la compilation. La réflexion est également utilisée pour instancier de nouveaux objets, appeler des méthodes et accéder ou modifier des variables d'instance de manière dynamique.
Pour illustrer, imaginons que vous ayez une classe Person
avec un champ name
et une méthode sayHello()
:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Bonjour, " + name + "!");
}
}
Avec la réflexion en Java, vous pourriez dynamiquement instancier un nouvel objet Person
, appeler sa méthode sayHello()
, et même modifier le champ name
, tout cela à l'exécution :
Class<?> personClass = Class.forName("com.example.Person");
Person person = (Person) personClass.getDeclaredConstructor(String.class).newInstance("Alice");
person.sayHello(); // Imprime: "Bonjour, Alice!"
Field nameField = personClass.getDeclaredField("name");
nameField.setAccessible(true); // Nécessaire pour accéder à un champ privé
nameField.set(person, "Bob");
person.sayHello(); // Imprime: "Bonjour, Bob!"
Il est important de noter que, bien que la réflexion soit un outil puissant, son utilisation incorrecte peut rendre votre code difficile à comprendre et à maintenir. De plus, l'accès ou la modification de champs et de méthodes privées peut violer les principes d'encapsulation et entraîner des effets secondaires inattendus. Ainsi, la réflexion en Java doit être utilisée avec précaution et seulement lorsque les autres options ne sont pas suffisantes.