• JDK5-注解


    注解是一个类,一个声明就是一个对象

    1. 简单注解

      @SuppressWarnings("msg")  - 压缩/抑制警告

      @Deprecated  - 声明过时

      @Override   - 声明复写

    2. 自定义注解

    1 public @interface Anno {
    2 }

    3. 注解的使用

    1 @Anno
    2 public class AnnoTest {
    3     public static void main(String[] args) {
    4         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
    5             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
    6             ...
    7         }
    8     }
    9 }

      但是在这里我们发现:无法获取到Anno的实例,是因为Anno注解在加载进内存时去除了

      以此引出注解的生命周期

        源文件:RetentionPolicy.SOURCE(如SuppressWarnings及Override)

        class文件:RetentionPolicy.CLASS(默认

        内存字节码:RetentionPolicy.RUNTIME(如Deprecated)

    4. 重定义注解

    1 @Retention(RetentionPolicy.RUNTIME)
    2 public @interface Anno {
    3 }

        

    5. 元注解

      元注解:对注解进行注解的注解(@Retention、@Target、@Documented和@Inherited)-> java.lang.annotation

      @Retention:设置注解的可见性(生命周期)

      @Target:设置注解的作用目标

      @Documented:指示javadoc应该为注解生成文档

      @Inherited:指示在子类继承父类时继承本注解

    6. 注解的作用范围

      Target元注解:@Target(ElementType[])

        如:@Target({ElementType.TYPE, ElementType.METHOD})

          @Target(ElementType.TYPE)  // 一个元素可以省略{}

      ElementType.

        TYPE:所有元素(类、接口、枚举...)

        PARAMETER:参数

        PACKAGE:包

        METHOD:方法

        LOCAL_VARIABLE:局部变量

        FIELD:属性

        CONSTRUCTOR:构造器

        ANNOTATION_TYPE:注解

    7. 为注解加属性(方法)

    注解中属性的类型:八种基本类型、String、Class(ClassName.class)、enum以及上述类型的数组

     1 @Retention(RetentionPolicy.RUNTIME)
     2 public @interface Anno {
     3     String color();
     4 }
     5 
     6 @Anno(color="red")
     7 public class AnnoTest {
     8     public static void main(String[] args) {
     9         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
    10             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
    11             System.out.println(anno.color());
    12         }
    13     }
    14 }

    8. 为注解属性添加默认值  

      若注解内只有一个属性且名为value或除value外其他属性均有默认值时,赋值时可以省略value,如下:

     1 @Retention(RetentionPolicy.RUNTIME)
     2 public @interface Anno {
     3     String value();
     4 }
     5 
     6 @Retention(RetentionPolicy.RUNTIME)
     7 public @interface Anno2 {
     8     String color() default "red";// 为属性设置默认值
     9     String value();
    10     int[] array() default {1, 2, 3};
    11     Anno annotation() default @Anno("Joshua");    // 注解中属性为注解
    12 }
    13 
    14 @Anno("Joshua")
    15 @Anno2("Joshua_AW")
    16 public class AnnoTest {
    17     public static void main(String[] args) {
    18         if(AnnoTest.class.isAnnotationPresent(Anno.class)) {
    19             Anno anno = (Anno)AnnoTest.class.getAnnotation(Anno.class);
    20             System.out.println(anno.value());
    21         }
    22     }
    23 }

    Anno2也可也这样引用:@Anno2(color="blue", value="Joshua", array=1)

  • 相关阅读:
    共创力董事长杨学明先生受邀参加CED智慧大会!
    杨学明老师为华宇金信(北京)软件有限公司提供为期两天的内训服务!
    《互联网敏捷测试管理实践》课程大纲 2018.12.15~16 (上海)
    共创力咨询杨学明老师为国电南瑞提供两天的内训服务!
    《软件测试管理》深圳公开课预告 2018.11.23~24 中南海滨大酒店
    软件测试管理的十大挑战
    对于开发人员修改代码引发新问题的处理措施
    热烈庆祝杨学明老师为上海某著名金融互联网公司提供两天的内训服务!
    《高效的互联网研发项目管理》课程大纲
    《软件测试管理》北京公开课预告 2018.9.28~29
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6021291.html
Copyright © 2020-2023  润新知