关键词搜索

源码搜索 ×
×

一篇文章带你搞定 Java 中自定义 Annotation

发布2020-02-23浏览626次

详情内容

一、Annotation 的定义格式

1. 定义简单的 Annotation

[public] @interface Annotation名称{
	数据类型 变量名称();
}

    使用 @interface 就相当于继承了 Annotation 接口

    自定义一个 Annotation

    public @interface MyDefaultAnnotationNoneParam{
    }
    
    • 1
    • 2

    使用 Annotation:

    @MyDefaultAnnotationNoneParam
    class Demo{//使用自定义的 Annotation
    }
    

      2. 向 Annotation 中设置内容

      public @interface MyDefaultAnnotationNoneParam{
      	public String value();//定义 Annotation 接收设置的内容
      	public String key();
      }
      
        4

      使用此 Annotation 时,可以将内容设置给 value

      (1)在 Annotation 中设置多个属性

      @MyDefaultAnnotationNoneParam(key = "Java",value = "World")
      class Demo{//使用自定义的 Annotation
      }
      

        (2)建立 Annotation 并设置数组属性

        public @interface MyDefaultAnnotationNoneParam{
        	public String[] value();//接收设置的内容是一个字符串数组
        }
        
          @MyDefaultAnnotationNoneParam(value = {"Java","World"})
          class Demo{//使用自定义的 Annotation
          }
          

            3. 默认值

            只要在定义 Annotation 时设置了属性,就必须在使用时设置其内容,为了方便使用,也可以在定义 Annotation 属性时指定其默认值:

            [public]@interface Annotation名称{
            	数据类型 变量名称() default 默认值;
            }
            

              定义一个存在默认值的 Annotation:

              public @interface MyDefaultAnnotationNoneParam{
              	public String value() default "World";
              	public String key() default "Java";
              }
              
                4

              此时使用 MyDefaultAnnotationNoneParam 时,如果没有设置内容,则会将默认值赋给属性,如果已经明确给出了内容,则将给出的内容赋给属性。

              4. 使用枚举限制设置的内容

              在 Annotation 中也可以通过枚举来限制 Annotation 的取值范围

              定义一个 MyName 的枚举

              public enum MyName{//定义枚举,其中包括 3 个内容
              	J1,J2,J3;
              }
              

                此时在定义 MyDefaultAnnotationEnum ,此 Annotation 的取值必须是 MyName 的枚举类型:

                public @interface MyDefaultAnnotationEnum {
                	public MyName name() default MyName.J2;//只能设置枚举中的取值,默认值为 Enum 中的内容
                }
                

                  同时以后在使用 MyDefaultAnnotationEnum 时,所有的取值就必须从 MyName 这个枚举中取得。

                  @MyDefaultAnnotationNoneParam(value = {name = MyName.J2})//使用自定义的 Annotation
                  class Demo{//使用自定义的 Annotation
                  }
                  

                    二、Retention 和 RetentionPolicy

                    在 Annotation 中,可使用 Retention 定义一个 Annotation 的保存范围。
                    此 Annotation 的定义如下:

                    @Documented
                    @Retention (value=RUNTIME)
                    @Target (value=ANNOTATION TYPE)
                    public @interface Retention{
                    	RetentionPolicy value () ;
                    }
                    
                      4
                    • 5
                    • 6

                    这里的 RetentionPolicy变量,用于指定 Annotation 的保存范围:
                    在这里插入图片描述
                    使用以上 Retention 指定一个在 RUNTIME 范围有效的 Annotation:

                    Override 定义采用的是@Retention(valuc= SOURCE),只能在源文件中出现。
                    Deprecated 定义采用的是@Retention(value=RUNTIME),可以在执行时出现。
                    SuppressWarnings 定义采用的是@Retention(value=SOURCE),只能在源文件中出现。
                    

                      定义在 RUNTIME 范围有效的 Annotation:

                      @Retention(value = RetentionPolicy.RUNTIME)//此 Annotation 在执行时起作用
                      public @interface MyDefaultRetentionAnnotion{
                          public String name() default "Java";//只能设置枚举中的取值
                      }
                      
                        4

                      相关技术文章

                      点击QQ咨询
                      开通会员
                      返回顶部
                      ×
                      微信扫码支付
                      微信扫码支付
                      确定支付下载
                      请使用微信描二维码支付
                      ×

                      提示信息

                      ×

                      选择支付方式

                      • 微信支付
                      • 支付宝付款
                      确定支付下载