简述
从Java5开始,Java开始支持注解。注解可以标注在类、方法、参数、变量声明等位置,用于告知编译器或某些类更多的信息。
内置注解
java.lang
- Override:标注在方法上,提示编译器该方法是重写自父类或接口的方法。如果父类或接口中没有签名一致的方法时,会报编译错误。
- Deprecated:标注在类、属性、方法等位置,提示编译器指定内容已经过时,不推荐使用。当使用了被
Deprecated
标注的内容时,编译器会报警告。 - SuppressWarnings:标注在类、属性、方法等位置,提示编译器忽略指定警告。
SuppressWarnings
通过value
来指定忽略的警告。 - SafeVarages:从Java7开始支持,表示忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
- FunctionalInterface:从Java8开始支持,标识一个匿名函数或函数式接口。
java.lang.annotation
- Retention:标注在注解上,说明该注解应当如何保存。(三个可选项,只在源码中、编译到类文件中、运行时可以反射访问)。
- Documented:标注在注解上,说明该注解应当包含在用户文档(如javadoc)中。
- Target:标注在注解上,说明该注解可以被标注在什么位置。
- Inherited:标注在注解上,标记该注解继承自哪个注解类。
- Repeatable:从Java8开始,标识某个注解可以在同一声明上使用多次。
自定义注解
与接口定义类似,区别仅在于需在interface
关键字前加@
符号。
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
String value() default "";
}
为了完善注解的信息,一般情况下需要添加Retention
注解和Target
注解。如果注解需要某些参数,可以在注解内添加方法。这些方法的返回值应当是字符串或基本类型,并且没有参数。一般情况下,需要为每个方法设定默认值。
使用注解时,可以直接@注解名
使用。后面可以加括号来为每个属性赋值。当只需要为value
属性赋值时,可以只写值。
@MyAnnotation
@MyAnnotation(value = "test")
@MyAnnotation("test")