Constructor
Manipulacão de Construtor usando o Mirror.
Refletindo
Refletindo um construtor pelos argumentos (retornará null se não for encontrado):
Class<T> clazz;
Constructor<T> c = new Mirror().on(clazz).reflect().constructor()
.withArgs(String.class, Object.class);
Reflectindo o único construtor de uma classe (lançará uma exceção se encontrar mais de um contrutor)
Class<T> clazz;
Constructor<T> m = new Mirror().on(clazz).reflect().constructor().withAnyArgs();
Refletindo todos os construtores de uma classe (retornará uma lista vazia caso nada seja encontrado):
Class<T> clazz;
List<Constructor<T>> l = new Mirror().on(clazz).reflectAll().constructors();
Refletindo todos os construtores de uma classe que sejam aceitos por um Matcher<Constructor> (retornará uma lista vazia caso nada seja encontrado):
Class<T> clazz;
List<Constructor<T>> l = new Mirror().on(clazz).reflectAll()
.constructors().matching(new SeuProprioMatcher());
Você também pode mapear seus construtores para outros tipos:
Class<T> clazz;
List<String> l = new Mirror().on(clazz).reflectAll()
.constructors().mappingTo(new SeuProprioMapperDeConstrutorParaString());
Invocando Construtores
Invocando um construtor:
Class<T> clazz;
T t = new Mirror().on(clazz).invoke().constructor().withoutArgs();
Você também pode passar um java.lang.reflect.Constructor:
Constructor<T> umConstrutor;
Class<T> clazz;
T t = new Mirror().on(clazz).invoke().constructor(umConstrutor).withArgs(valor1, valor2);
Ignorando Construtores
Com o Mirror, você pode ignorar completamente construtores para criar instancias:
Class<T> clazz;
T t = new Mirror().on(clazz).invoke().constructor().bypasser();
Note que esse comportamento só é suportado pelas VMs suportadas pelo projeto Objenesis.
Dê uma olhada em http://code.google.com/p/objenesis/wiki/ListOfCurrentlySupportedVMs .