38 lines
1.1 KiB
Java
38 lines
1.1 KiB
Java
package de.nclazz.commons.reflection;
|
|
|
|
import java.lang.annotation.Annotation;
|
|
import java.lang.reflect.Field;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.function.Predicate;
|
|
|
|
public final class ReflectionUtils {
|
|
|
|
private ReflectionUtils() { /* no-op */ }
|
|
|
|
public static Predicate<Field> hasAnnotation(Class<? extends Annotation> annotation) {
|
|
return field -> field.isAnnotationPresent(annotation);
|
|
}
|
|
|
|
public static Set<Field> getDeclaredFieldRecursively(Class<?> clazz, Predicate<Field> predicate) {
|
|
Class<?> currentClass = clazz;
|
|
Set<Field> fields = new HashSet<>();
|
|
|
|
while(currentClass != Object.class && !currentClass.isInterface()) {
|
|
for(Field field : currentClass.getDeclaredFields()) {
|
|
if(predicate.test(field)) {
|
|
fields.add(field);
|
|
}
|
|
}
|
|
currentClass = currentClass.getSuperclass();
|
|
}
|
|
|
|
return fields;
|
|
}
|
|
|
|
public static Set<Field> getDeclaredFieldRecursively(Class<?> clazz) {
|
|
return getDeclaredFieldRecursively(clazz, f -> true);
|
|
}
|
|
}
|