Я использую отражение, поэтому я могу проверить, есть ли у некоторых полей в другом классе аннотации. классКак проверить, имеет ли поле аннотацию при использовании отражения
DummyUser:
package com.reflec.models;
public class DummyUser {
@NotNull
private String firstName;
private String lastName;
@NotNull
private String email;
public DummyUser() {
}
public DummyUser(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
Основной класс:
public static void main(String[] args) {
DummyUser user = new DummyUser();
List<Field> list = seekFieldsWithAnnotations(user);
System.out.println("Size: " + list.size());
}
public static List<Field> seekFieldsWithAnnotations(Object o) {
Class<?> clss = o.getClass();
List<Field> fieldsWithAnnotations = new ArrayList<>();
List<Field> allFields = new ArrayList<>(Arrays.asList(clss.getDeclaredFields()));
for(final Field field : allFields) {
if(field.isAnnotationPresent((Class<? extends Annotation>) clss)) {
Annotation annotInstance = field.getAnnotation((Class<? extends Annotation>) clss);
if(annotInstance.annotationType().isAnnotation()) {
fieldsWithAnnotations.add(field);
}
}
}
//clss = clss.getSuperclass();
return fieldsWithAnnotations;
}
Если я получить размер списка, возвращаемого seekFieldsWithAnnotations
, размер всегда равен 0. Когда на самом деле я ожидал должно быть 2, потому что поля firstName
и email
имеют аннотации над ними.
Если я возвращаю список allFields
и получаю его размер, я возвращаюсь 3, потому что в классе DummyUser
есть три поля.
Так что я думаю, что место, где я неправильно это
for(final Field field : allFields) {
// Here I am trying to check if annotations are present
if(field.isAnnotationPresent((Class<? extends Annotation>) clss)) {
Annotation annotInstance = field.getAnnotation((Class<? extends Annotation>) clss);
if(annotInstance.annotationType().isAnnotation()) {
fieldsWithAnnotations.add(field);
}
}
}
Я пробовал это, но 'getDeclaredAnnotations()' ничего не возвращает вообще. Таким образом, 'declAnnotations' заканчивается значением null. – ASmoothNoble