Here you can find the source of getAnnotation(Class> clazz, Class
public static <R extends Annotation> R getAnnotation(Class<?> clazz, Class<R> annotationClass)
//package com.java2s; //License from project: Apache License import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class Main { public static <R extends Annotation> R getAnnotation(Class<?> clazz, Class<R> annotationClass) { return (R) findAnnotation(clazz, annotationClass, new HashSet<>()); }/* www . j av a 2 s . co m*/ 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; } 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); } }