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

Refletindo

Refletir um atributo através do nome (devolverá null se não encontrar):
Class clazz;
Field f =
new Mirror().on(clazz).reflect().field("nomeAtributo");
Refletir todos os campos de uma classe (devolverá uma lista vazia se não encontrar fields):
Class clazz;
List<Field> l =
new Mirror().on(clazz).reflectAll().fields();
Refletir todos os campos de uma classe que sejam aceitos por um Matcher<Field>(devolverá uma lista vazia se não encontrar fields):
Class clazz;
List<Field> l =
new Mirror().on(clazz).reflectAll().fields()
                                
.matching(new SeuProprioMatcher());
Você também pode mapear seus campos para outros tipos:
Class<T> clazz;
List<String> l =
new Mirror().on(clazz).reflectAll()
                     
.fields().mappingTo(new SeuProprioMapperDeFieldParaString());