Java Annotation 研究

什么是 Annotation

  • 一种可以加到 Java 代码中的语法形式
  • 可以加到指定的 Target 上,Target 类型由 ElementType 定义

为什么需要 Annotation

  • 提醒编译器检查,比如 @Override
  • XML 配置离得太远

Java 预定义的注解

  • Override:编译器用来检查是否重写了父类
  • Deprecated:标记 Target 被废弃,如果使用了 Target,编译器会报 warning
  • SuppressWarnings:支持编译器不要报告指定的 warning
  • Retention:Meta Annotations, 标记 Annotation 的保留时间
    • SOURCE:仅在代码中,被编译器忽略
    • CLASS:保留到编译阶段,不会保留到 Java 虚拟机运行时
    • RUNTIME:保留到 Java 虚拟机运行时
  • Documented:Meta Annotations,标记 Annotation 应当出现在 JavaDoc 中
  • Target:Meta Annotations,标记 Annotation 应当用在哪些类型上,见 ElementType
  • Inherited:Meta Annotations。如果使用到 A 类上,A 类的子类,都会被标记。
  • SafeVarargs:指明使用可变长度范型类型参数的方法和构造器是安全的
  • FunctionalInterface:指明 Interface 是一个 functional interface
  • Repeatable:指明对同一个 Target 可以使用多次注解

Meta Annotations

  • 用于 Annotation 的 Annotation

ElementType:可注解的 Target 枚举

  • TYPE:类,接口(包括 Annotation),枚举
  • FIELD:类的成员变量,枚举常量
  • METHOD:方法
  • PARAMETER:方法的传参
  • CONSTRUCTOR:构造函数
  • LOCAL_VARIABLE:局部变量
  • ANNOTATION_TYPE:注解
  • PACKAGE:package 声明上
  • TYPE_PARAMETER:可以用在 Type(类型)的声明式前
  • TYPE_USE:可以用在所有使用 Type(类型)的地方

Annotation 是如何起作用的

  • 编译器读取
  • 代码中通过反射读取 Annotation 信息

参考

标签: none

添加新评论