Porque meta-programação deve ser fácil.

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 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()
                              
.methodsMatching(new SeuProprioMatcher());