Java 注解

分类

  • 编译器使用 (编译即丢)
    • @Override:让编译器检查该方法是否正确地实现了覆写;
    • @SuppressWarnings:告诉编译器忽略此处代码产生的警告
  • 由工具处理 .class 文件使用的注解
    • 被编入 .class, 但不会常驻内存
    • 被一些底层库使用,一般不必处理
  • (最常用) 在程序运行期能够读取的注解,它们在加载后一直存在于 JVM 中
    • 一个配置了 @PostConstruct 的方法会在调用构造方法后自动被调用 (Java 提供,JVM 并不识别)

定义

  • 使用 @interface 语法来定义
  • 注解的参数类似无参数方法,可以用 default 设定一个默认值

元注解 (meta annotation)

  • @Target: 定义 Annotation 能够被应用于源码的哪些位置
    • 类或接口:ElementType.TYPE
    • 字段:ElementType.FIELD
    • 方法:ElementType.METHOD
    • 构造方法:ElementType.CONSTRUCTOR
    • 方法参数:ElementType.PARAMETER
    • 只有一个元素时,可以省略数组的写法????
  • @Retention: 定义了 Annotation 的生命周期
    • 仅编译期:RetentionPolicy.SOURCE
    • 仅 class 文件:RetentionPolicy.CLASS;(default)
    • 运行期:RetentionPolicy.RUNTIME。(more)
  • @Inherited: 子类是否可继承父类
  • @Repeatable: 这个元注解可以定义 Annotation 是否可重复

Collections

References