¿Qué es la reflexión (Reflection) en Java y para qué sirve?
¡Hola a todos! Llevo unos seis meses aprendiendo Java, escribiendo aplicaciones simples y me encontré con el término "reflexión" (Reflection API). Leí la documentación de Oracle, pero no lo entendí del todo.
Tengo una clase 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("Hola, soy " + name);
}
private void secretMethod() {
System.out.println("¡Método secreto!");
}
}
```
Entiendo que normalmente creamos un objeto con `new User("Iván", 25)` y llamamos a los métodos directamente. Pero, ¿para qué necesito obtener información sobre la clase durante la ejecución del programa? ¿Cuándo podría ser útil?
Me desconcierta que la reflexión permita acceder a campos y métodos privados, e invocarlos. ¿Acaso esto no rompe la encapsulación? ¿Y hay alternativas a la reflexión?
Explíquenme, por favor, con ejemplos simples: qué es la reflexión, por qué se necesita y cuándo se usa.