Skip to content

Check if Annotation is inherited

I have an annotation and three classes like this:

public @interface MyAnnotation {}

public class MySuperClass {}

public class MySubClassA extends MySuperClass {}

public class MySubClassB extends MySuperClass {}

Is there any way I can determine if a present annotation is inherited or declared directly at the class?

Something like a method public boolean isInherited(Class<?> clazz, MyAnnotation annotation) that should only be called if the annotation is present.

Exptected output:

isInherited(MySuperClass.class, MySuperClass.class.getAnnotation(MyAnnotation.class)) --> false
isInherited(MySubClassA.class, MySubClassA.class.getAnnotation(MyAnnotation.class)) --> true
isInherited(MySubClassB.class, MySubClassB.class.getAnnotation(MyAnnotation.class)) --> false


You can use getDeclaredAnnotation instead of getAnnotation:

public boolean isInherited(Class<?> clazz, Class<? extends Annotation> annotation) {
    return clazz.isAnnotationPresent(annotation) && clazz.getDeclaredAnnotation(annotation) == null;