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

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());