1、用于类的继承,意思是说带有@Inherited注解的注解修饰的类的子类也自动继承这个注解
2、只有类有继承,所以继承只对应子类有效
下面是小例子。
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface InheritedTest1 {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedTest2 {
String value();
}
public class Main {
@InheritedTest1("InheritedTest1")
@InheritedTest2("InheritedTest2")
public class Test1 {
}
public class Test2 extends Test1 {
}
public class Test3 extends Test2 {
}
public static void main(String[] args) {
Class<Test2> test2 = Test2.class;
var tmp = test2.isAnnotationPresent(InheritedTest1.class);
System.out.println("@InheritedTest1 present for test2:" + tmp);
tmp = test2.isAnnotationPresent(InheritedTest2.class);
System.out.println("@InheritedTest2 present for test2:" + tmp);
Class<Test3> test3 = Test3.class;
tmp = test3.isAnnotationPresent(InheritedTest1.class);
System.out.println("@InheritedTest1 present for test3:" + tmp);
tmp = test3.isAnnotationPresent(InheritedTest2.class);
System.out.println("@InheritedTest2 present for test3:" + tmp);
}
}
输出:
@InheritedTest1 present for test2:true
@InheritedTest2 present for test2:false
@InheritedTest1 present for test3:true
@InheritedTest2 present for test3:false