Avatar ·

O que é Reflexão (Reflection) em Java e para que serve?

Olá a todos! Estudo Java há cerca de seis meses, escrevo aplicações simples e me deparei com o termo "reflexão" (Reflection API). Li a documentação da Oracle, mas não entendi completamente. \n\nEu tenho uma classe simples:\n\n```java\npublic class User {\n private String name;\n private int age;\n\n public User(String name, int age) {\n this.name = name;\n this.age = age;\n }\n\n public void sayHello() {\n System.out.println("Olá, eu sou " + name);\n }\n\n private void secretMethod() {\n System.out.println("Método secreto!");\n }\n}\n```\n\nEu entendo que normalmente criamos um objeto com `new User("Ivan", 25)` e chamamos os métodos diretamente. Mas para que é necessário obter informações sobre a classe durante a execução do programa? Quando isso pode ser útil? \n\nMe confunde que a reflexão permite acessar campos e métodos privados, invocá-los. Isso não quebra o encapsulamento? E existem alternativas à reflexão?\n\nExplique, por favor, com exemplos simples: o que é