zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    Contoso 大学 1 为 ASP.NET MVC 应用程序创建 EF 数据模型
    NuGet 入门
    关于Oracle表及字段的注释 转
    javascript + xmlhttp 调用webservice 吃力不讨好
    转 javascript小技巧
    oracle电子书下载站
    JavaScript中引号的嵌套
    数据结构中的各种排序方法JS实现
    TSQL查询进阶流程控制语句
    TSQL查询进阶数据集之间的运算
  • 原文地址:https://www.cnblogs.com/joshua-aw/p/6021291.html
Copyright © 2011-2022 走看看