0Pricing
Java Academy · Aula

Inspeção de Classes com Reflexão

Recupere objetos Class e inspecione campos, métodos, construtores e anotações em tempo de execução.

Inspeção de Classes com Reflexão é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

O Que É Reflexão?

A reflexão permite que um programa Java inspecione e manipule sua própria estrutura em tempo de execução — lendo nomes de classes, campos, métodos, construtores e anotações sem conhecê-los no momento da compilação.

Obtendo um Objeto Class

Obtenha um objeto Class<?> por meio do literal, de getClass() ou de Class.forName().

Class<String> c1 = String.class;           // literal
Class<?> c2 = "hello".getClass();           // from instance
Class<?> c3 = Class.forName("java.util.ArrayList"); // by name

Inspecionando Metadados de uma Classe

Recupere o nome da classe, o pacote, a superclasse e as interfaces implementadas a partir do objeto Class.

Class<?> c = ArrayList.class;
System.out.println(c.getName());           // java.util.ArrayList
System.out.println(c.getSimpleName());     // ArrayList
System.out.println(c.getSuperclass());     // class java.util.AbstractList
for (Class<?> iface : c.getInterfaces()) System.out.println(iface.getName());

Listando Campos Declarados

getDeclaredFields() retorna todos os campos declarados na classe (incluindo os privados). getFields() retorna apenas os campos públicos, incluindo os herdados.

for (Field f : User.class.getDeclaredFields()) {
    System.out.printf("%-10s %s%n", f.getType().getSimpleName(), f.getName());
}

Listando Métodos

getDeclaredMethods() lista todos os métodos (independentemente do acesso). Use getMethods() para obter os métodos públicos, incluindo os herdados.

for (Method m : String.class.getDeclaredMethods()) {
    System.out.println(m.getName() + " -> " + m.getReturnType().getSimpleName());
}

Inspecionando Parâmetros de Métodos

Recupere os tipos e os nomes dos parâmetros (isso exige a opção de compilação -parameters), além das anotações.

Method m = UserService.class.getDeclaredMethod("findById", Long.class);
for (Parameter p : m.getParameters()) {
    System.out.println(p.getType().getSimpleName() + " " + p.getName());
}

Listando Construtores

Inspecione os construtores assim como faria com os métodos. getDeclaredConstructors() inclui os privados usados em instâncias únicas ou construtores de objetos.

for (Constructor<?> c : User.class.getDeclaredConstructors()) {
    System.out.println(Arrays.toString(c.getParameterTypes()));
}

Lendo Anotações

Recupere as anotações da classe, do método ou do campo. Verifique a presença com isAnnotationPresent e obtenha o valor com getAnnotation.

@RestController
@RequestMapping("/users")
public class UserController {}

// Inspection:
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println("Path: " + Arrays.toString(rm.value()));

Verificando Modificadores

Use Modifier.isPublic(), isStatic(), isFinal() etc. nos modificadores de campos, métodos e classes para filtrar por visibilidade.

for (Field f : User.class.getDeclaredFields()) {
    int mod = f.getModifiers();
    if (Modifier.isPrivate(mod)) System.out.println("private: " + f.getName());
}

Verificação com isAssignableFrom e instanceof

Use Class.isAssignableFrom() para verificar programaticamente a compatibilidade de tipos — o equivalente a instanceof, mas com objetos de classe conhecidos apenas em tempo de execução.

Class<?> parent = Collection.class;
Class<?> child  = ArrayList.class;
System.out.println(parent.isAssignableFrom(child)); // true
System.out.println(child.isAssignableFrom(parent));  // false

Ressalva de Desempenho

A reflexão é de 10 a 50 vezes mais lenta que o código direto para acessar campos ou métodos simples. Armazene em cache os objetos Field e Method; chame setAccessible(true) uma vez e reutilize-os.

private static final Field NAME_FIELD;
static {
    try { NAME_FIELD = User.class.getDeclaredField("name"); NAME_FIELD.setAccessible(true); }
    catch (NoSuchFieldException e) { throw new RuntimeException(e); }
}

Verificação Rápida

Qual método retorna os campos privados de uma classe (mas não os herdados)?

Recapitulação

Obtenha Class por meio de literais ou de forName(). Use getDeclaredFields/Methods/Constructors para inspecionar todos os níveis de acesso. Leia as anotações com getAnnotation. Armazene objetos reflexivos em cache para melhorar o desempenho.

Perguntas Frequentes

A aula “Inspeção de Classes com Reflexão” é grátis?

Sim — o texto completo de “Inspeção de Classes com Reflexão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Inspeção de Classes com Reflexão”?

Recupere objetos Class e inspecione campos, métodos, construtores e anotações em tempo de execução. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Inspeção de Classes com Reflexão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Inspeção de Classes com Reflexão
  2. Invocação de Métodos e Acesso a Campos
  3. Proxies Dinâmicos com InvocationHandler
  4. Desempenho da Reflexão e Alternativas
← Voltar para Java Academy