Вы не можете напрямую добавить новое поле к объекту Class
.Есть сторонние API, которые вы можете использовать для генерации или модификации классов (например, ASM, BCEL), хотя их лучше избегать, потому что они добавляют много сложности.
Что касается второй части вашеговопрос, вы можете использовать объект Class
, чтобы пройти через поля и изучить их.
// NOTE : this only looks at the fields in A and not it's superclass.
// you'll have to do a recursive lookup if you want super's fields too.
for(Field field : A.class.getDeclaredFields()) {
if(B.class.equals(field.getType()) {
System.out.println("A." + field.getName() + " is of type B");
}
}