天天看点

Annotation之补充

  Annotation之补充

@Inherited

表示一个Annotation能否被使用其类的子类继续继承下去,如果没有写上此注释,则此Annotation根本就是无法继承的。

官方解释:指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。

具体实例

MyAnnotation

  1. import java.lang.annotation.Documented; 
  2. import java.lang.annotation.ElementType; 
  3. import java.lang.annotation.Inherited; 
  4. import java.lang.annotation.Retention; 
  5. import java.lang.annotation.RetentionPolicy; 
  6. import java.lang.annotation.Target; 
  7. @Inherited //添加此句
  8. @Target(ElementType.METHOD) 
  9. @Retention(RetentionPolicy.RUNTIME) 
  10. @Documented 
  11. public @interface MyAnnotation { 
  12. public String name() default "singsong"; 
Person 类中使用 Annotation
  1. public class Person { 
  2.     @MyAnnotation(name = "The person's name is singsong") 
  3.     public void getName() { 
  4.     }     
Students 类继承
  1. public class Students extends Person { 
使用反射机制来实现Students类继承的注释
  1. import java.lang.reflect.Method; 
  2. public class TestMyAnnotation { 
  3.     public static void main(String[] args) throws Exception { 
  4.         Class<?> c=Students.class; 
  5.         Method method=c.getMethod("getName"); 
  6.         MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); 
  7.         System.out.println(myAnnotation.name()); 
  8.     } 

运行结果:

The person's name is singsong

继续阅读