Reflexão é o processo onde se consegue em tempo de execução informações (métodos, atributos e construtores) de uma classe.
Vou mostrar aqui duas classes, a primeira classe será usada para ser refletida e a segunda classe irá apresenta como usar o básico da reflexão.
Classe matemática
package reflexao;
public class matematica {
public double pi(){
return Math.PI;
}
public static String nomeClasse(){
return "matemática";
}
public int soma(int a, int b){
return a+b;
}
}
Classe principal
package reflexao;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author Anselmo Battisti
*/
public class Main {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
String str = new String("Anselmo");
Field atributos[] = null;
Method metodos[] = null;
Class c = str.getClass();
atributos = c.getDeclaredFields();
System.out.println("ATRIBUTOS:");
for(int i=0; i < atributos.length; i++){
System.out.println(atributos[i].toString());
}
metodos = c.getMethods();
System.out.println("MÉTODOS:");
for(int i=0; i < metodos.length; i++){
System.out.println(metodos[i].toString());
}
// invocar um método de uma classe a partir da String do seu nome
String stringNomeClasse = "reflexao.matematica";
String stringNomeMetodo = "pi";
String stringNomeMetodoNome = "nomeClasse";
String stringNomeSoma = "soma";
// carrega a classe
Class classeGenerica = Class.forName(stringNomeClasse);
// instancia um objeto
Object obj = classeGenerica.newInstance();
// retorna todos os métodos da classe passada
Method metodoPI = classeGenerica.getMethod(stringNomeMetodo);
Method metodoNome = classeGenerica.getMethod(stringNomeMetodoNome);
// invoda o método do obj instanciado
System.out.println(metodoPI.invoke(obj).toString());
// caso o método seja estático
System.out.println(metodoNome.invoke(stringNomeClasse));
// chama um método com parâmetros
Method soma = classeGenerica.getMethod(stringNomeSoma, int.class, int.class);
System.out.println(soma.invoke(obj,5,10));
}
}








Estou realizando minha atividade diária de monitorar meu RSS quando me deparo com esta reflexão! Ao invés de ficar refletindo, preste atenção na aula!!! haha
T+