`

java annotation

    博客分类:
  • java
阅读更多

JDK内置的annotaion

1. @Target

表示该注解用于什么地方,可能的 ElemenetType 参数包括: ElemenetType.CONSTRUCTOR   构造器声明 ElemenetType.FIELD   域声明(包括 enum 实例) ElemenetType.LOCAL_VARIABLE   局部变量声明 ElemenetType.METHOD   方法声明 ElemenetType.PACKAGE   包声明 ElemenetType.PARAMETER   参数声明 ElemenetType.TYPE   类,接口(包括注解类型)或enum声明

2. @Retention

表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:

  • SOURCE:信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。
  • ClASS:信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去。系统默认值是CLASS。
  • RUNTIME:表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的。

举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;@Deprecated里面的 Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被 Deprecated。

3. @Documented

@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息。

4. @Inherited

如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型. 综上所述,见例子就明白了。

 

  1. @Target(ElementType.METHOD)   
  2. @Retention(RetentionPolicy.RUNTIME)   
  3. @Documented  
  4. @Inherited  
  5. public @interface VisitorRole {   
  6.     String value();   
  7. }  

自定义annotaion参见http://download.oracle.com/javase/1.5.0/docs/guide/language/annotations.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics