Capítulo 17. Reflexão, ou "Uma classe chamada classe"
Este trabalho foi traduzido com recurso a IA. Agradecemos o teu feedback e comentários: translation-feedback@oreilly.com
17.0 Introdução
A classe java.lang.Class e o pacote de reflexão java.lang.reflect fornecem uma série de mecanismos para recolher informações da Máquina Virtual Java. Conhecidas coletivamente como reflexão, estas facilidades permitem-te carregar classes em tempo real, encontrar métodos e campos em classes, gerar listagens dos mesmos e invocar métodos em classes carregadas dinamicamente. Existe até um mecanismo que te permite construir uma classe a partir do zero (bem, na verdade, a partir de um array de bytes) enquanto o teu programa está a correr. Isto é o mais próximo que o Java te deixa chegar da magia, dos segredos internos da máquina Java.
A JVM em si é um grande programa, normalmente escrito em C e/ou C++, que implementa a abstração da Máquina Virtual Java. Podes obter o código fonte do OpenJDK e de outras JVMs através da Internet, e podes estudá-lo durante meses. Aqui concentramo-nos apenas em alguns aspectos, e apenas do ponto de vista de um programador que utiliza as facilidades da JVM, e não como funciona internamente; esse é um detalhe de implementação que pode variar de uma JVM de um fornecedor para outro.
Começarei com o carregamento dinâmico de uma classe existente, passarei a listar os campos e métodos de uma classe e a invocar métodos, e terminarei criando uma classe em tempo real usando um ...