Java元注解

整理一下,要不老忘。。。

元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解有以下几种:

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

@Target

用于描述注解的范围,即注解在哪用。它说明了Annotation所修饰的对象范围,取值类型(ElementType)有以下几种:

public enum ElementType {
    /** 类、接口(包括注解类型)或枚举声明*/
    TYPE,

    /** 字段声明(类属性)(包括枚举常量) */
    FIELD,

    /** 方法声明 */
    METHOD,

    /** 形式参数声明(方法中的param) */
    PARAMETER,

    /** 构造函数声明 */
    CONSTRUCTOR,

    /** 方法局部变量声明 */
    LOCAL_VARIABLE,

    /** 注解类型声明 */
    ANNOTATION_TYPE,

    /** 包装声明 */
    PACKAGE,

    /**
     * 类型参数声明
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * 使用类型(可以在任意地方使用)
     *
     * @since 1.8
     */
    TYPE_USE
}
  • 其中 PACKAGE 类型比较特别,如下图可以利用开发工具创建 package-info.java 样式的文件,然后可以将注解加在package关键字上。


    image.png
  • TYPE_PARAMETER 类型一般放在方法范型上

    public <@Anno T> void test() {
    }

@Retention

用于描述注解的生命周期,表示需要在什么级别保存该注解,即保留的时间长短。取值类型(RetentionPolicy)有以下几种:

  • SOURCE : 在源文件中有效(即源文件保留)
  • CLASS : 在class文件中有效(即class保留)
  • RUNTIME : 在运行时有效(即运行时保留)

@Documented

用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。它是一个标记注解,没有成员。

@Inherited

作用:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解,子类也可以通过反射获取到这个注解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。