关于注解:java-Annotations

43次阅读

共计 1401 个字符,预计需要花费 4 分钟才能阅读完成。

注解定义和用法

Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate.

注解是一种元数据,它可能关联代码中不同元素和构造,不会间接影响它注解的元素,然而能够被编译器辨认,能够联合反射等应用。
一个简略的注解申明如下,@interface 关键字引入了新的注解类型。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TaskName {String value();
}

注解能够申明有默认值和没有默认值的属性

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TaskName {String value();
    int taskId() default 0;}

如果注解申明了没有默认值的属性,那么在该注解被利用的所用中央都应该提供注解属性值。

@TaskName (name = "test")

如果注解只有一个属性,并且是 value 那么名字能够被省略,然而应用的时候必须指定 value 的值,例如:@TaskName (“test”)

public @interface TaskName {String value();
}

保留策略

每个注解都有一个被称为保留策略(Retention Policy)的特色,它是一组如何保留注解的策略组合的枚举(RetentionPolicy 类型)。

策略 形容
CLASS 注解被编译器记录在 class 文件中,然而在运行时不须要虚拟机保留(即运行时不存在)
RUNTIME 注解被编译器记录在 class 文件中并且在运行时被虚拟机保留,因而能够通过反射机制获取
SOURCE 注解被编译器抛弃(即注解仅在源码中保留,class 文件中不存在)

上面的代码,RetentionPolicy.RUNTIME 将会保障注解在编译过程和运行的应用程序中存在。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TaskName {String value();
}

元素类型

每个注解必须有它可能利用的元素类型,元素类型被定义成一组可能的元素类型的枚举(ElementType)。

元素类型 形容
ANNOTATION_TYPE 表明注解可用于注解类型申明(利用于另外的注解)
CONSTRUCTOR 表明注解可用于构造函数申明
FIELD 表明注解可用于字段 / 域(包含枚举常量)申明
LOCAL_VARIABLE 表明注解可用于局部变量申明
METHOD 表明注解可用于办法申明
PACKAGE 表明注解可用于包申明
PARAMETER 表明注解可用于参数申明
TYPE 表明注解可用于类、接口(包含注解类型)、枚举类型的申明
TYPE_PARAMETER 表明注解能够写在类型变量的申明语句中
TYPE_USE 示意该注解能写在应用类型的任何语句中(eg:申明语句、泛型和强制转换语句中的类型)

注解能够应用 @Target 注解申明多个与之相关联的多个元素类型

正文完
 0