第十一章 注解

  • 主要使用在框架中的反射

内置注解

@Deprecated 已过时
参数:since 过时版本 forRemoval 是否移除
可以标注在类、方法、属性

@Override 重写父级方法
只能标注在实例方法上且父级必须存在该方法

@SuppressWarnings 抑制警告
rawtypes 抑制未使用泛型警告 all 抑制所有警告 等等
有问题解决问题,不建议使用

@FunctionalInterface 函数接口
检查该接口有且只能一个抽象方法
只能标注在接口类上

自定义注解

  • 声明自定义注解
// 自定义注解使用关键字@interface
public @interface MyAnnotation {

    /**
     * 自定义注解属性
     * 属性名后面必须添加:()
     * 语法:
     *      属性类型 属性的名字()
     *      使用 default 关键字指定默认值
     *
     */
    String value() default "默认值";
}
  • 使用自定义注解
**
 * 注解语法:@自定义注解名(属性名 = 属性值)
 * 如果注解中有属性,使用的时候必须给属性赋值,否则报错,除非定义的注解的属性有默认值
 * 如果属性只有一个且名为value 可以不写属性名
 * 如果属性只有一个且名为value 的 数组 可以直接写值{},如果数组的值只有一个,可以不写{}
 */
@MyAnnotation(value = "aaa")
public void m() {}

元注解

  • 用来标注注解的注解叫做元注解。(也是JDK内置的注解。)

常用的元注解:
@Retention:设置注解的保持性
@Target:设置注解可以出现的位置
@Documented:设置注解是否可以生成到帮助文档中
@Inherited:设置注解是否支持继承
@Repeatable:设置注解在某一个元素上是否可以重复使用(Java8的新特性。)

  • @Retention:
① Retention英文意思有保留、保持的意思,它表示注解存在阶段是保留在源代码(编译期),字节码(类加载)或者运
行时(JVM中运行)
② 在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期。
@Retention(RetentionPolicy.SOURCE):注解仅存在于源代码中,在字节码文件中不包含。
@Retention(RetentionPolicy.CLASS):注解在字节码文件中存在,但运行时无法获得(默认)
@Retention(RetentionPolicy.RUNTIME):注解在字节码文件中存在,且运行时可通过反射获取。
  • @Target:
用于描述注解可以使用的位置,该注解使用ElementType枚举类型用于描述注解可以出现的位置
ElementType有如下枚举值:
@Target(ElementType.TYPE):作用于接口、类、枚举、注解
@Target(ElementType.FIELD):作用于属性、枚举的常量
@Target(ElementType.METHOD):作用于方法
@Target(ElementType.PARAMETER):作用于方法参数
@Target(ElementType.CONSTRUCTOR):作用于构造方法
@Target(ElementType.LOCAL VARIABLE):作用于局部变量
@Target (ElementType.ANNOTATION TYPE):作用于注解
@Target(ElementType.PACKAGE):作用于包
@Target (ElementType.TYPE PARAMETER):作用于泛型,即泛型方法、泛型类和泛型接口。
@Target(ElementType.TYPE USE):作用于任意类型。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容