Java 提供了许多内置注解,大部分是专用注解,有9个用于一般目的,在这个9个注解中,有 4 个来自 java.lang.annotation 是 @Retention 、@Documented、@Target、@Inherited ;另外 5 个来自 java.lang 是:@Override、@Deprecated、@FunctionalInterface、@SafeVarargs、@SuppressWarnings
- @Retention
只能用于注解其他注解、用于指定保留策略 - @Documented
标记接口、用于通知某个工具--注解将被文档化,只能用于注解其他注解 - @Target
用于指定可以应用注解的声明的类型,智能注解其他注解,@Target 只有一个参数、这个参数必须是来自 ElementType 枚举的常量,这个参数指定了将为其应用注解的声明类型。
目标常量 |
可应用注解的声明的类型 |
ANNOTATIONI_TYPE |
另外一个注解 |
CONSTRUCTOR |
构造函数 |
FIELD |
域变量 |
LOCAL_VARIABLE |
局部变量 |
METHOD |
方法 |
PACKAGE |
包 |
PARAMETER |
参数 |
TYPE |
类、接口或枚举 |
TYPE_PARAMETER |
类型参数(JDK8 新增) |
TYPE_USE |
类型使用(JDK8 新增) |
可以指定这些值中的一个或多个,多个值必须在 {} 里,显示指定目标可以明确说明注解的用途及范围
- @Inherited
是标记注解,只能用于另外一个注解的声明,会导致父类的注解被子类继承 - @Override
是标记注解,只能用于方法,带有此注解的方法必须重写父类中的方法。 - @Deprecated
是标记注解,用于指示声明是过时的,并且已经被更新的的形式取代 - @FunctionalInterface
JDK8新添加的一个标记注解,用于接口,指出备注解的的接口是一个函数式接口。如果被注解的接口不是函数式接口,将会编译错误,创建函数式接口并一定需要此注解,根据定义任何一个抽象方法的接口都是函数式接口,此注解的意义仅在于提供信息 - @SafeVarargs
标记注解,只能用于方法和构造函数,指示没有发送与可变长度参数相关的不安全动作。该注解只能用于varargs 方法或者声明为 static 或final 的构造函数 - @SuppressWarnings
用于指定能抑制一个或多个编译器可能会报告的警告。使用是字符串形式表示的名称来指定要被抑制的警告