• 自定义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的作用。

  • 相关阅读:
    关于程序员认知和编程学习,没有任何一篇文章会讲得如此透彻
    Found 1 slaves: Use of uninitialized value in printf at /usr/local/percona-toolkit/bin/pt-online-schema-change line 8489
    alert 多语言的处理
    #!/bin/sh & #!/bin/bash区别
    mysql 常用
    java.io.FileNotFoundException
    struts1 & jquery form 文件异步上传
    简单的数据库连接池实例(java语言)
    null id in com.rocky.** entry 错误处理
    java unsupported major.minor version 51.0 解决
  • 原文地址:https://www.cnblogs.com/alsf/p/6667029.html
Copyright © 2020-2023  润新知