首页 > 代码库 > JAVA进阶-Annotation
JAVA进阶-Annotation
注解元数据分为4部分分别为Target,Documented,Inherited,Retention:
字段,类,返回值等等;
声明:
/** * @author Lean @date:2014-10-13 */ @Target(ElementType.METHOD) public @interface WorkInProgress {}
应用:
/** * @author Lean @date:2014-10-13 */ public class AnnotationSample { //当在字段中使用时:The annotation @WorkInProgress is disallowed for this location //@WorkInProgress private int age; @WorkInProgress public static boolean doSomeThing() { // TODO Auto-generated method stub return false; } }
Retention>设置注解可见性;使用到RetentionPolicy枚举
RetentionPolicy.SOURCE>>编译器可见,但对.class文件和运行时不可见;
RetentionPolicy.CLASS>>默认工具可见,对.class文件可见,但运行不可见;
RetentionPolicy.RUNTIME>>运行时可见;不会被.class文件所知,在运行时告诉JVM的值;
以下例子为运行时内省检查,当一个元注解需要多个限定值的时,必须使用{}和逗号隔开,
如@Target({ElementType.METHOD,ElementType.TYPE})
/** * @author Lean @date:2014-10-13 */ @WorkInProgress public class AnnotationSample { private int age; @WorkInProgress public static boolean doSomeThing() { // TODO Auto-generated method stub return false; } public static void main(String[] args) { AnnotationSample obj=new AnnotationSample(); Class clazz=obj.getClass(); WorkInProgress progress=(WorkInProgress) clazz.getAnnotation(WorkInProgress.class); System.out.println(clazz.getName()); if (clazz.isAnnotationPresent(WorkInProgress.class)) { System.out.println("class Annotationed WorkInProgress!"); } Method[] methods=clazz.getMethods(); for (Method method : methods) { if (method.isAnnotationPresent(WorkInProgress.class)) { System.out.println("method Annotationed WorkInProgress!"); } } } } @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @interface WorkInProgress {}
Documented>为添加注解的类书写文档,编译运行后执行javadoc的dos命令.即可在该命令行
位置看到所生成的文档.Inherited>当对某个类进行注解的时候,希望对继承他的子类也进行注解.默认情况下
没有使用该@Inherited注解方式,系统会认为子类不需要继承该功能,如下:
/** * @author Lean @date:2014-10-13 */ @WorkInProgress public class AnnotationSample { public static void main(String[] args) throws IllegalAccessException { AnnotationSample obj=new AnnotationSample(); Class clazz=obj.getClass(); if (clazz.isAnnotationPresent(WorkInProgress.class)) { System.out.println("class Annotationed WorkInProgress!"); } Class childClass=AnnotationChildClass.class; if (childClass.isAnnotationPresent(WorkInProgress.class)) { System.out.println("child class Annotationed WorkInProgress!"); } } } @Inherited @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @interface WorkInProgress {} class AnnotationChildClass extends AnnotationSample{ }
JAVA进阶-Annotation
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。