zoukankan      html  css  js  c++  java
  • 元注解


    • 定义:写在注解定义上的注解叫(注解是给程序提供信息,写在注解上的注解是给注解提供信息,给信息提供信息的叫元信息)注解。

     一、Target 元注解

    • 作用:告诉你定义的注解可以使用在哪里(类定义上,方法,参数等)使用。不写就是就可以用在所有位置上。

       1.定义

    @Target({ ElementType.METHOD, ElementType.PARAMETER })   // 只能写在方法或者参数上
      public @interface Anno06 {
    }

      2. 使用

    public class test01 {
        @Anno01              //注解写在方法之上,若写在类外便会报错
        public void test() {     
        }
    }

    二、Retention 元注解

    • 作用:告诉注解信息保留到哪个阶段,如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS
    • 定义了三种情况的枚举:

       ①CLASS:编译器将把注解记录在类文件中,但在运行时 JVM 不需要保留注释。

       ②RUNTIME:编译器将把注解记录在类文件中,在运行时JVM 将保留注解,因此可以反射性地读取。

       ③SOURCE:编译器要丢弃的注解。

        1. 定义

    @Retention(RetentionPolicy.SOURCE)      //只在源码中

     @Retention(RetentionPolicy.RUNTIME)      //使用该注解保留到运行前

      public @interface Anno01 {

    
    

    }

     

       2.反射测试

    public class test03 {
    
        public static void main(String[] args) throws NoSuchMethodException, SecurityException {
            Class clazz=test02.class;
            Method m=clazz.getDeclaredMethod("test");
            System.out.println(m.isAnnotationPresent(Anno01.class));
        }
    }

    三、Documented元注解

    • 作用:如果一个注解定义时间使用了该元注解,那么产生的javadoc文档就会把注解显示出来。

      1. 定义

    @Documented
    public @interface Anno10 {
       public String doc();
    }

      2. 使用

    public class Test20 {
        @Anno10(doc = "我是文档注解")
        public void test() {
        }
    }
    //然后选中项目,点击Project,选中Generate Javadoc,然后连续点两个next,输入框输入-encoding UTF-8 -charset UTF-8,最后finish生成javadoc文档,将index.html拖入浏览器查看即可

      

    四、Inherited 元注解

    • 作用:用于指示子类是否可以继承父类中的注解。

      1.定义注解

    @Retention(RetentionPolicy.RUNTIME)    //定义注解1
    public @interface Anno01 {
    
    }

      @Inherited                //定义注解2

      @Retention(RetentionPolicy.RUNTIME)

      public @interface Anno02 {

      }

     

      2. 定义父类A和B

    @Anno01
    @Anno02
    public class A {        //定义父类A
    }

    public class B extends A {      //定义父类B继承父类A
    }

      3. 反射查看继承

    public class Test {
        public static void main(String[] args) {
            Class clazz=B.class;
            Annotation[] as=clazz.getAnnotations();
              //只输出了@cn.edu.xcu.annotation.v2.Anno02(),说明加上@Inherited才会被继承
            for (Annotation annotation : as) {
                System.out.println(annotation);
            }
        }
    }

  • 相关阅读:
    51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法
    51Nod 1212无向图最小生成树
    51Nod 1081前缀和
    51Nod 1118 机器人走方格--求逆元
    Java四种线程池的使用
    java常用的几种线程池比较
    一名3年工作经验的程序员应该具备的技能(写得很好,果断转)
    《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
    javadoc
    java 反射机制 观点
  • 原文地址:https://www.cnblogs.com/yuanshuai1026/p/11564170.html
Copyright © 2011-2022 走看看