- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- Java接口
- Java枚举
- Java注解
Java注解类型
标记注解类型
标记注解类型是没有元素的注解类型,甚至没有默认值。标记注解由注解处理工具使用。
public @interface Marker { } @Marker public class Main{ }
元注解类型
元注解类型是注解类型,用于注解其他注解类型。元注解类型是Java类库的一部分。它们在包java.lang.annotation
中声明。
以下注解类型是元注解类型:
- 目标
- 保留
- 继承
- 文档记录
- 可重复的
- 本地
目标注释类型
目标注释类型注释注释类型以设置上下文以使用注释类型。它只有一个名为value
的元素。 其值元素是java.lang.annotation.ElementType
枚举类型的数组。下表列出了ElementType
枚举中的所有常量。
常量名称 | 描述 |
---|---|
ANNOTATION_TYPE | 注释另一个注释类型声明,使注释类型为元注释。 |
CONSTRUCTOR | 注释构造函数。 |
FIELD | 注释字段和枚举常量。 |
LOCAL_VARIABLE | 注释局部变量。 |
METHOD | 注释方法。 |
PACKAGE | 注释包声明。 |
PARAMETER | 注释参数。 |
TYPE | 注释类,接口(包括注释类型)或枚举声明。 |
TYPE_PARAMETER | 在通用类,接口,方法等中注释类型参数。 |
TYPE_USE | 注释所有类型的使用。 |
以下Version
注释类型具有目标元注释,它指定Version
注释类型可以与只有三种类型的程序元素一起使用:任何类型(类,接口,枚举和注释类型),构造函数和方法。
import java.lang.annotation.Target; import java.lang.annotation.ElementType; @Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD }) public @interface Version { int major(); int minor(); }
Version
注释不能用于除其Target
注释中指定的三种类型之外的任何程序元素。
import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ ElementType.TYPE_USE }) @interface MyAnno { } @Target({ ElementType.TYPE_USE }) @interface MyAnno2 { } public class Main { public void processData() throws @MyAnno Exception { int roundedValue = (@MyAnno2 int) .02; Main t = new @MyAnno Main(); } }
如果不使用Target
注释类型注释注释类型,则注释类型可以用作任何声明的修饰符,但类型参数声明除外。
保留(Retention)注释
保留(Retention)注释设置注释类型的保留策略。注释可以在三个级别保留 -
- 仅源代码
- 仅类文件,默认行为。
- 类文件和运行时
保留(Retention
)元注释类型指定Java应如何保留注释。如果注释类型具有“仅限源代码”保留策略,则在编译到类文件中时将删除其实例。如果保留策略为“仅类文件”,则其实例将保留在类文件中,但不能在运行时读取。
如果保留策略为“类文件和运行时”,则注释实例保留在类文件中,并且它们可在运行时读取。保留元注释类型声明一个名为value
的元素,它是java.lang.annotation.RetentionPolicy
枚举类型。
RetentionPolicy
枚举有三个常量:SOURCE
,CLASS
和 RUNTIME
,它们分别用于指定仅源,仅类和类运行时的保留策略。
以下代码在版本注释类型上使用保留元注释。它指定版本注释应该在运行时可用。
import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @interface Version { int major(); int minor(); }
如果不对注释类型使用保留元注释,则其保留策略仅默认为类文件。则将无法在运行时读取这些注释。在类文件中或在运行时,局部变量声明上的注释永远不可用,而不考虑注释类型的保留策略。
继承注释类型
继承注释类型是标记元注释类型。如果注释类型使用Inherited
元注释注释,则其实例将由子类声明继承。
如果使用注释类型注释除类声明以外的任何元素,它没有任何效果。以下代码显示了@Inherited
元注释类型的效果。
import java.lang.annotation.Inherited; @interface Ann2 { int id(); } @Inherited @interface Ann3 { int id(); } @Ann2(id = 1) @Ann3(id = 2) class A { } // Class B inherits Ann3(id=2) annotation from the class A class B extends A { }
文档注释
文档化注释类型是标记元注释类型。如果注释类型用Documented
注解,Javadoc工具将为其所有实例生成文档。
import java.lang.annotation.Documented; @Documented @interface Version { int major(); int minor(); } @Version(major = 1, minor = 0) public class Main { }
当使用Javadoc工具为Main
类生成文档时,Main
类声明上的Version
注释也会作为文档的一部分生成。
可重复注释
Java 8添加了可重复元注释类型。如果在一个单独的代码元素上重复使用它,注释类型声明必须用@Repeatable
来注解。
Repeatable
注释类型只有一个名为value
的元素,其类型是另一个注释类型的类类型。
import java.lang.annotation.Repeatable; @interface LogHistory { Log[] value(); } @Repeatable(LogHistory.class) @interface Log { String date(); String comments(); } @Log(date = "01/01/2018", comments = "B") @Log(date = "01/21/2018", comments = "A") public class Main { public static void process() { } }
本地注释
本地(Native)注释类型是元注释,用于注释可以从本地代码引用的字段。它是一个标记注释。
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王