zoukankan      html  css  js  c++  java
  • 自定义annotation

    自定义annotation格式:

    定义简单annotation:

    public @interface MyDefaultAnnotationArrayParam{
    }

    使用简单annotation:

    @MyDefaultAnnotationArrayParam
    class Demo{
    };

    此时表示在Demo类上使用annotation。

    还可以向annotation中设置内容,使用变量接收参数。

    public @interface MyDefaultAnnotationSingleParam{
        public String value() ;    // 接收设置的内容
    }

    在使用的时候,必须清楚指明变量的内容

    @MyDefaultAnnotationSingleParam("李兴华")
    class Demo{
    };

    或者可以使用明确标记,表示内容赋给哪个参数。

    @MyDefaultAnnotationSingleParam(value="李兴华")
    class Demo{
    };

    以上参数是赋值给value属性的,

    既然可以赋值给一个参数,也可赋值给多个参数。

    例如对于这个annotation

    public @interface MyDefaultAnnotationMoreParam{
        public String key() ;
        public String value() ;    // 接收设置的内容
    }

    在使用的时候需要设置两个参数,一个是key,一个是value。

    @MyDefaultAnnotationMoreParam(key="MLDN",value="李兴华")
    class Demo{
    };

    也可以设置一个数组进去

    public @interface MyDefaultAnnotationArrayParam{
        public String[] value() ;    // 接收设置的内容
    }

    接收内容本身应该是一个数组,类似之前的SuppressWarnings。

    @MyDefaultAnnotationArrayParam(value={"MLDN","李兴华"})
    class Demo{
    };

    以上全部annotation有一个特点,所有使用的时候使用注释的时候设置上去。

    也可以为参数设置默认内容,在声明的时候使用Default即可。

    public @interface MyDefaultAnnotationValue{
        public String key() default "MLDN" ;    // 指定好了默认值
        public String value() default "李兴华" ;    // 指定好了默认值
    }

    当使用的时候,就可以不再设置内容了。不报错,如下。

    @MyDefaultAnnotationValue
    class Demo{
    };

    操作中,对于一个annotation而言,有时候会固定其取值范围,只能取固定几个值此时需要依靠枚举

    首先定义一个枚举:

    public enum MyName{    // 定义枚举类型
        MLDN,LXH,LI ;
    }

    以后的annotation的取值只能从这三个值中取。

    使用:

    public @interface MyDefaultAnnotationEnum{
        public MyName name() default MyName.LXH ;    // 指定默认值,默认值是通过一个枚举变量设置,注意此时的name()的类型是枚举类型
    }

    以上annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此annotation的时候,也需要从枚举中固定取值

    @MyDefaultAnnotationEnum(name=MyName.LI)    //因为annotation使用的是默认值,而且参数类型是枚举型,所以设置参数也是枚举型,只能从固定枚举中取值
    class Demo{
    };

    retention和retentionpolicy

    retentionpolicy三个取值范围,

    在三个范围中,最重要的是RUNTIME,因为执行时候起作用。

    使用retention制定一个annotation的范围,范围为RUNTIME范围。

    import java.lang.annotation.Retention ;
    import java.lang.annotation.RetentionPolicy ;
    @Retention(value=RetentionPolicy.RUNTIME)    // 表示此Annotation在运行时有效
    public @interface MyDefaultRententionAnnotation{
        public String name() default "李兴华" ;
    }

    此annotation可以在运行时候起作用,而且在以后讲解反射与annotation操作中,也必须使用此种范围。

    总结

    1,annotation的定义格式,以及变量类型:枚举,数组,普通变量。

    2,retention,retentionPolicy的作用。

  • 相关阅读:
    MySQL(一)
    Python(二十九)
    python(二十八)
    python(二十七)
    Python(二十六)
    Linux的安装包命令/yum 与 Rpm
    linux系统监控与硬盘分区/格式化/文件系统管理
    linux操作系统及命令Part 2
    linux命令大全总结
    linux 用户/群组/权限
  • 原文地址:https://www.cnblogs.com/alsf/p/6667029.html
Copyright © 2011-2022 走看看