Annotation之补充
@Inherited
表示一个Annotation能否被使用其类的子类继续继承下去,如果没有写上此注释,则此Annotation根本就是无法继承的。
官方解释:指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。
具体实例
MyAnnotation - import java.lang.annotation.Documented;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Inherited //添加此句
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface MyAnnotation {
- public String name() default "singsong";
- }
在 Person 类中使用 Annotation - public class Person {
- @MyAnnotation(name = "The person's name is singsong")
- public void getName() {
- }
- }
Students 类继承 类 - public class Students extends Person {
- }
使用反射机制来实现Students类继承的注释 - import java.lang.reflect.Method;
- public class TestMyAnnotation {
- public static void main(String[] args) throws Exception {
- Class<?> c=Students.class;
- Method method=c.getMethod("getName");
- MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
- System.out.println(myAnnotation.name());
- }
- }
运行结果:
The person's name is singsong