Java 中仍然存在类型注解和声明注解,并且它们是不同的且不重叠的。
type annotation 可以写在 type 的任何用途上。
它在概念上创建了一种新的、更具体的类型。
也就是说,它描述了该类型所代表的值。
例如,int 类型包含值 ...、-2、-1、0、1、2、...
@Positive int 类型包含值 1、2、...
因此,@Positive int 是int 的子类型。
声明注释可以写在任何声明(类、方法或变量)上。它描述了被声明的东西,但不描述运行时值。以下是声明注释的示例:
@Deprecated
class MyClass { ... }
说程序员不应该使用MyClass。
@Override
void myMethod() { ... }
表示myMethod 覆盖了超类或接口中的声明。
@SuppressWarnings(...)
int myField = INITIALIZATION-EXPRESSION;
表示编译器不应在初始化表达式中发出有关代码的警告。
以下是同时使用声明注释和类型注释的示例:
@Override
@NonNull String myMethod() { ... }
@GuardedBy("myLock")
@Regex String myField;
请注意,类型注释描述了值,而声明注释说明了该字段的方法或使用。
作为一种风格,声明注释写在自己的一行上,类型注释直接写在类型之前,在同一行。