预定义的注解类型
Java SE API 预定义了一系列的注解类型。一些是被Java编译器使用,另外一是应用于其他注解(注解的注解).
Java语言使用的注解
java.lang
包中所定义的注解类型有 @Deprecated
, @Override
, 以及 @SuppressWarnings
.
@Deprecated @Deprecated
注解表明了标注的元素是不推荐的并且不应该再继续使用。无论什么时候程序使用了有该标记的类,方法,字段,编译器都会产生一个警告。如果元素标记了@Deprecated
那么他的主时钟也必须是用Java文档 @deprecated
标签,正如下面的例子。在Java文档注释中使用符号@
与注解中一样并不是巧合的coincidental:他们是关联的概念。不过,要注意,Java文档注释里的标签首字母为小写d
注解中首字母为D
.
|
|
@Override @Override
注解告知编译器元素是为了复写在父类中定义的元素。复写方法将会在接口与继承Interfaces and Inheritance一篇中讨论到.
|
|
当复写方法的时候并不是必须要使用这个注解,他可以帮助你预防错误。如果标记了@Override
标记的方法没有正确的复写他父类中的一个方法,编译器就会产生错误。
@SuppressWarnings @SuppressWarnings
注解告诉编译器,阻止可能产生的特定的警告。下面的例子中,使用了一个不推荐的方法,编译器通常会生成一个警告。在这种情况下,使用这个注解就可以阻止产生警告.
|
|
每一个编译器警告属于一个分类。Java语言明确列出了两类警告: deprecation
以及 unchecked
.
unchecked
警告,当遇到泛型 generics出现之前的遗留代码时可能会出现。 如果要阻止多个类型的警告,参考以下语法:
|
|
@SafeVarargs @SafeVarargs
注解,当使用在一个构造器或者方法时,断定该方法在使用可变参数时没有潜在的不安全因素。使用了该注解,与 varargs
可变参数使用相关的未检查警告可以被阻止。
@FunctionalInterface @FunctionalInterface
功能接口注解,在Java SE8中引入。表明是一个功能接口,与Java语言标准中定义的功能接口一样.
用于其他注解的注解
用于其注解的注解叫做元注解meta-annotations. java.lang.annotation
中定义了数个元注解.
@Retention @Retention
保留注解表明了注解是如何被存储的:
RetentionPolicy.SOURCE
– 该标记表明注解只在资源层面被保留,编译器会忽略.RetentionPolicy.CLASS
– 该标记表明注解在编译时被保留,JVM会忽略.RetentionPolicy.RUNTIME
– 该标记表明注解会被JVM保留,可以再运行时使用.
@Documented @Documented
文档注解,表明使用了对应注解的元素,会被Java文档工具Javadoc tool使用。(默认情况下,注解不会被包含在Java文档中)。参考Java文档工具页面 Javadoc tools page,获取更多相关信息.
@Target @Target
注解,限制了限制了注解可以应用于那种Java元素类型。目标注解可以使用如下的元素类型作为它的值:
ElementType.ANNOTATION_TYPE
可以应用于注解类型.ElementType.CONSTRUCTOR
可以应用于构造器.ElementType.FIELD
可以应用于字段或者属性(字段、枚举的常量).ElementType.LOCAL_VARIABLE
可以应用于局部变量.ElementType.METHOD
可以应用于方法级别的注解.ElementType.PACKAGE
可以应用于包的定义.ElementType.PARAMETER
可以应用于方法的参数。- ElementType.TYPE 可以应用于任何的类(接口、类、枚举、注解)。
@Inherited @Inherited
继承注解表明,注解类型可以用从器的父类继承。(默认是不可以继承的),当用户查询类的注解类型而类本身没有该注解时,就会查询其父类是否有该注解。这个注解只能使用与类的定义.
@Repeatable @Repeatable
可重复的注解,在Java SE 8中引入,表明该注解在同一个声明或者类型处可以使用不止一次。参考可重复注解 Repeating Annotations.