Прежде чем мы перейдем к коду отражений, я думаю, что вам понадобится еще одна аннотация для представления ваших классов, представляющих пользовательскую форму. Ваша текущая аннотация @Form
лучше подходит на уровне поля, поскольку она представляет метку для каждого поля формы. Я бы переименовал это в @FormField
. Затем ваша аннотация @Form
может быть использована только для того, чтобы сообщить API отражений, какие классы являются пользовательскими формами.
Теперь перейдем к коду. Во-первых, вам нужно инициализировать отражения в вашем приложении. Этот пакет будет первым пакетом, в котором вы хотите использовать отражение в своем приложении.
private static Reflections reflections = new Reflections("your.java.package");
Чтобы каждый класс помечался аннотацией @Form
, вы можете использовать:
Set<Class<? extends Forms>> customForms = reflections.getTypesAnnotatedWith(Form.class)
Теперь вы можете l oop через каждую пользовательскую форму и анализировать аннотации каждого поля:
// Loop through every class with Form annotation
for (Class<? extends Forms> form : customForms) {
for (Field field : form.getDeclaredFields()) {
// Check each field, if it has your FormField attribute, you can then access the annotation methods
if (field.isAnnotationPresent(FormField.class)) {
Label label = new Label(field.getAnnotation(FormField.class).label());
// Do additional stuff to build your form
}
}
}