Avatar ·

O que é reflexão (reflection) em Java e para que serve?

Olá, colegas! Sou um desenvolvedor Java iniciante, programo nessa linguagem há cerca de seis meses. Ultimamente, tenho encontrado frequentemente o termo "reflection" (reflexão) na documentação e em fóruns. Li alguns artigos, mas não entendi completamente a essência. Expliquem, por favor, em palavras simples: o que é essa tal de reflexão e para que ela serve? O que me confunde é que em Java estamos acostumados a trabalhar com classes e objetos em tempo de compilação: escrevi uma classe, criei uma instância com new, chamei um método — tudo claro e previsível. Já a reflexão, pelo que entendi, permite "entrar dentro" da classe durante a execução do programa. Para que isso seria necessário? Afinal, se eu conheço a estrutura da classe, posso escrever o código de forma fixa. Por favor, deem um exemplo concreto onde não seja possível evitar a reflexão. Suponha que exista esta classe simples:
public class User {
    private String name;
    private int age;

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

    private