Here you can find the source of findAnnotation(Class> clazz, Class extends Annotation> annotationClass, Set
private static Annotation findAnnotation(Class<?> clazz, Class<? extends Annotation> annotationClass, Set<Class<?>> set)
//package com.java2s; //License from project: Apache License import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.Set; public class Main { private static Annotation findAnnotation(Class<?> clazz, Class<? extends Annotation> annotationClass, Set<Class<?>> set) { if (clazz == null || set.contains(clazz) || clazz.equals(Object.class)) { return null; }// www. ja v a 2 s .c om set.add(clazz); Annotation result = findAnnotation(clazz.getSuperclass(), annotationClass, set); if (result != null) { return result; } Annotation findResult = Arrays.stream(clazz.getInterfaces()) .map((Class<?> interf) -> findAnnotation(interf, annotationClass, set)) .filter((Annotation annotation) -> annotation != null).findFirst().orElse(null); if (findResult != null) { return findResult; } Annotation interfaceAnnotation = Arrays.stream(clazz.getDeclaredAnnotations()) .filter((Annotation annotation) -> annotation.annotationType().equals(annotationClass)).findFirst() .orElse(null); if (interfaceAnnotation != null) { return interfaceAnnotation; } return Arrays.stream(clazz.getDeclaredAnnotations()) .map((Annotation annotation) -> findAnnotation(annotation.annotationType(), annotationClass, set)) .filter((Annotation annotation) -> annotation != null).findFirst().orElse(null); } }