Method
Manipulacão de Métodos no Mirror. No Mirror a pesquisa dos métodos também é feita
nas superclasses.
Refletindo
Refletindo um método pelo nome (retornará null se não for encontrado):
Class clazz;
Method m = new Mirror().on(clazz).reflect().method("nomeMetodo").withoutArgs();
Refletindo um método pelos seus argumentos (retornará null se não for encontrado):
Class clazz;
Method m = new Mirror().on(clazz).reflect().method("nomeMetodo")
.withArgs(String.class, Object.class);
Refletindo um método com nome único (retornará null se não for encontrado ou lançará
uma MirrorException se encotrar mais de uma método com o mesmo nome):
Class clazz;
Method m = new Mirror().on(clazz).reflect().method("nomeMetodo").withAnyArgs();
Refletindo todos os métodos de uma classe (retornará uma lista vazia caso nada seja encontrado):
Class clazz;
List<Method> l = new Mirror().on(clazz).reflectAll().methods();
Refletindo todos os getters de uma classe (retornará uma lista vazia caso nada seja encontrado):
Class clazz;
List<Method> l = new Mirror().on(clazz).reflectAll().getters();
Refletindo todos os setters de uma classe (retornará uma lista vazia caso nada seja encontrado):
Class clazz;
List<Method> l = new Mirror().on(clazz).reflectAll().setters();
Refletindo todos os métodos de uma classe que sejam aceitos por um Matcher<Method> (retornará uma lista vazia caso nada seja encontrado):
Class clazz;
List<Method> l = new Mirror().on(clazz).reflectAll()
.methods().matching(new SeuProprioMatcher());
Você também pode mapear seus métodos para outros tipos:
Class<T> clazz;
List<String> l = new Mirror().on(clazz).reflectAll()
.methods().mappingTo(new SeuProprioMapperDeMethodParaString());
Invocando Métodos
Invocando um método estático:
Class clazz;
Object retorno = new Mirror().on(clazz).invoke().method("nomeMetodo")
.withArgs(valor1, valor2);
Invocando um método de instância:
Object target;
Object returnValue = new Mirror().on(target).invoke().method("nomeMetodo")
.withoutArgs();
Você também pode passar um java.lang.reflect.Method ao invés de uma String com o nome do método:
Invocando um método de instância:
Method umMetodo;
Object obj;
Object retorno = new Mirror().on(obj).invoke().method(umMetodo).withArgs(valor1, valor2);
Invocando um setter:
Field field;
Object target;
new Mirror().on(target).invoke().setterFor(field).withValue(value1);
Invocando um getter:
String fieldName;
Object target;
Object returnValue = new Mirror().on(target).invoke().getterFor(fieldName);