美文网首页
Java注解备忘

Java注解备忘

作者: 静水红阳 | 来源:发表于2021-12-27 00:03 被阅读0次

    基本概念

    注解,Annotation,是在JDK 1.5 及后续版本引入的一个特性,可以声明在类,字段,方法等前面,用来对这些元素进行说明和注释。

    一、元注解

    Java中定义了一些元注解,用来对其他annotation进行说明,主要包括有如下四个:

    • @Target
    • @Retention
    • @Documented
    • @Inherited

    下面我们对每一个元注解的作用及常用参数进行说明。

    1. @Target

    该元注解用来描述注解的使用范围,即被标识的注解能够用在什么地方。常用的取值如下:

    • CONSTRUCTOR:构造器
    • FIELD:域
    • LOCAL_VARIABLE:局部变量
    • METHOD:方法
    • PACKAGE:包
    • PARAMETER:参数
    • TYPE:类、接口(包括注解类型) 或enum声明

    2. @Retention

    该元注解用来定义Annotation的保留时长

    某些Annotation仅出现在源代码中,而被编译器丢弃;而一部分Annotation会被编译在class文件中。

    常用的取值如下:

    • SOURCE:在源文件中有效(源文件保留),当Java文件编译成class文件时,注解被丢弃。
    • CLASS:在class文件中有效(class保留),当class文件被加载时丢弃。
    • RUNTIME:在运行时有效(运行时保留)

    显然生命周期长度:SOURCE < CLASS < RUNTIME。

    生命周期选择

    对于注解生命周期的选择可以参考如下使用:

    1. 如果需要在运行时去动态获取注解信息,则只能使用RUNTIME
    2. 如果是需要在编译时进行一些预处理操作(如本文的APT),则可以选择使用CLASS
    3. 如果只是做一些检查性的操作,如@Override 和@SuppressWarnings,则可以使用SOURCE。

    3. @Documented

    此元注解表明这个注解应该被 javadoc工具记录.

    默认情况下,javadoc是不包括注解的.

    但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。

    4. @Inherited

    @Inherited 元注解是一个标记注解,阐述了某个被标注的类型是被继承的。

    如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

    效果
    • 类继承关系中@Inherited的作用

      类继承关系中,子类会继承父类使用的注解中被@Inherited修饰的注解

    • 接口继承关系中@Inherited的作用

      接口继承关系中,子接口不会继承父接口中的任何注解,不管父接口中使用的注解有没有被@Inherited修饰

    • 类实现接口关系中@Inherited的作用

      类实现接口时不会继承任何接口中定义的注解

    二、自定义注解

    自定义注解可以使用@interface来处理,用来自动继承java.lang.annotation.Annotation接口,由编译程序自动完成其他细节,代码格式如下:

    元注解
    public @interface 注解名 {
        定义体
    }
    

    注解参数的可支持数据类型:

    1. 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2. String类型
    3. Class类型
    4. enum类型
    5. Annotation类型
    6. 以上所有类型的数组
    Annotation类型的参数设置

    参数可以遵循如下使用:

    1. 只能使用public或者默认default这两个访问权限修饰
    2. 参数成员只能用基本类型
    • byte
    • short
    • char
    • int
    • long
    • float
    • double
    • boolean
    • String,Enum,Class,annotations等数据类型
    1. 如果只有一个参数成员,最好把参数名称设为"value",后加小括号.

    定义了注解之后需要生成注解处理器来对注解进行处理,如采用APT技术。

    相关文章

      网友评论

          本文标题:Java注解备忘

          本文链接:https://www.haomeiwen.com/subject/espeqrtx.html