java-commons/src/main/java/de/nclazz/commons/reflection/ReflectionUtils.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);
}
}