1、@Deprecated
@Documented @Retention(value=RUNTIME) @Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE}) public @interface 已过时的 一个程序单元注释”不是一个程序员应该使用,通常是因为它是危险的,因为一个更好的选择的存在。编译器警告当一个过时的程序元素的使用或重写非过时的代码。 从以下版本开始: 一点五 See The Java™ Language Specification: 9.6.3.6 @弃用
2、@FunctionalInterface
@Documented @Retention(value=RUNTIME) @Target(value=TYPE) public @interface FunctionalInterface 用翔实的注释类型来表示一个接口类型声明的目的是空功能接口由java语言规范定义。从概念上讲,一个功能接口有一个抽象的方法。因为 default methods已经实现,他们不是抽象的。如果一个接口声明一个抽象方法重写一个 java.lang.Object的公共方法,也不指望对接口的抽象方法计数以来任何实现的接口都将从 java.lang.Object实施或其他地方。 注意功能接口的实例可以用lambda表达式,方法或构造函数创建参考参考。 如果一个类型用此注释类型注释,则需要编译器来生成一个错误消息: 类型是一个接口类型和注释类型、枚举、类。 注释类型满足功能接口的要求。 然而,编译器会把任何接口满足功能接口作为一个功能接口,无论是否FunctionalInterface注释出现在接口声明的定义。 从以下版本开始: 一点八 See The Java™ Language Specification: 4.3.2。类对象,9.8个功能接口,接口方法体9.4.3
3、@Override
@Target(value=METHOD) @Retention(value=SOURCE) public @interface Override 表示一个方法声明的目的是覆盖父类方法声明。如果一个方法是注释,该注释类型的编译器是除非下列条件中的至少一个保持需要产生一个错误信息: 该方法是重写或实现一个方法在父类声明。 该方法具有一个签名,是覆盖于任何公开声明的方法在Object。 从以下版本开始: 一点五 See The Java™ Language Specification: 9.6.1.4 @Override
4、@SafeVarargs
@Documented @Retention(value=RUNTIME) @Target(value={CONSTRUCTOR,METHOD}) public @interface SafeVarargs 一个程序员断言体标注的方法或构造函数没有对其参数进行交互可能不安全的操作。应用这种标注方法或构造函数抑制个空不可具体化的变arity制止警告(vararg)型和抑制在调用点制止警告参数数组的创建。 除了使用限制的@Target元注释强加的,编译器都需要实现这个注释类型的附加使用限制;它是一个编译时错误,如果一个方法或构造函数的声明是一个@SafeVarargs注释注释,要么: 宣言是一个固定数量的方法或构造函数 宣言是一个可变数量的方法,既不static也final。 当该注释类型被应用到一个方法或构造函数声明中时,鼓励编译器发出警告: 可变数量的参数有一个泛型具体化的元素类型,包括原始类型,Object,和String。(unchecked警告该注释类型的抑制已经不发生一个泛型具体化元素类型。) 的方法或构造函数的声明具有潜在的不安全操作的机构,例如赋值的变量数量的参数的数组元素,产生一个unchecked警告。一些不安全的操作不会触发未检查的警告。例如,在 @SafeVarargs // Not actually safe! static void m(List<String>... stringLists) { Object[] array = stringLists; List<Integer> tmpList = Arrays.asList(42); array[0] = tmpList; // Semantically invalid, but compiles without warnings String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime! } 走样导致运行时ClassCastException。 该平台的未来版本可能会强制编译器错误,这样不安全的操作。 从以下版本开始: 一点七 See The Java™ Language Specification: 4.7泛型具体化类型,进行正式的参数,9.6.3.7 @ SafeVarargs
5、@SuppressWarnings
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE}) @Retention(value=SOURCE) public @interface SuppressWarnings 指示在注释元素(和包含在注释元素中的所有程序元素中)应被抑制命名的编译器警告。注意,警告在给定元素抑制是警告抑制所有包含元素的一个超集。例如,如果您对一个类进行注释以抑制一个警告和注释一个抑制另一个警告的方法,这两个警告将被抑制在该方法中。 作为一个风格的问题,程序员应该总是使用这个注释对最深嵌套的元素,它是有效的。如果你想在一个特定的方法中抑制警告,你应该注释该方法,而不是它的类。 从以下版本开始: 一点五 See The Java™ Language Specification: 4.8原始类型,引用类型的变量不4.12.2,5.1.9转换5.5.2检查投和无节制的演员,9.6.3.5 @ suppresswarnings