Avatar ·

¿Qué es la reflexión (reflection) en Java y para qué sirve?

¡Hola, colegas! Soy un desarrollador Java principiante, llevo unos seis meses escribiendo en este lenguaje. Últimamente me encuentro a menudo con el término "reflection" (reflexión) en la documentación y en los foros. Leí varios artículos, pero no terminé de captar la esencia. Explíquenme, por favor, en palabras simples: ¿qué es esta bestia y para qué sirve? Me confunde que en Java estamos acostumbrados a trabajar con clases y objetos en la etapa de compilación: escribí una clase, creé una instancia con new, llamé a un método — todo claro y predecible. Pero la reflexión, según entendí, permite "meterse dentro" de la clase durante la ejecución del programa. ¿Para qué podría ser necesario? Porque si conozco la estructura de la clase, puedo escribir el código de forma fija. Por favor, den un ejemplo concreto donde no se pueda prescindir de la reflexión. Supongamos que tenemos esta clase simple:
public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    private