Qu'est-ce que la réflexion (Reflection) en Java et pourquoi est-elle nécessaire ?
Bonjour à tous ! J'apprends Java depuis environ six mois, j'écris des applications simples et j'ai rencontré le terme "réflexion" (Reflection API). J'ai lu la documentation d'Oracle, mais je n'ai pas tout compris.
J'ai une classe simple :
```java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Bonjour, je suis " + name);
}
private void secretMethod() {
System.out.println("Méthode secrète !");
}
}
```
Je comprends que normalement on crée un objet avec `new User("Ivan", 25)` et on appelle les méthodes directement. Mais à quoi sert d'obtenir des informations sur la classe pendant l'exécution du programme ? Quand cela peut-il être utile ?
Ce qui me trouble, c'est que la réflexion permet d'accéder aux champs et méthodes privés, de les invoquer. Cela ne viole-t-il pas l'encapsulation ? Et existe-t-il des alternatives à la réflexion ?
Expliquez-moi, s'il vous plaît, avec des exemples simples : qu'est-ce que