常见标准annotation类型: Override:java.lang.Override 是一个marker annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。 如果我们使用了这种annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。 Deprecated:Deprecated也是一种marker annotation。当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元素。 所以使用这种修饰具有一定的 “延续性”:如果我们在代码中通过继承或者覆盖的方式使用了这个过时的类型或者成员, 虽然继承或者覆盖后的类型或者成员并不是被声明为 @Deprecated,但编译器仍然要报警。 SuppressWarnings:此注解能告诉Java编译器关闭对类、方法及成员变量的警告。
JDK的元Annotation @Retention: 只能用于修饰一个Annotation定义,用于指定该Annotation可以保留的时间 value:RetentionPolicy.CLASS:编译器吧注释记录在class文件中,运行java程序时,jvm不保留注释,这歌是默认值 RetentionPolicy.RUNTIME:编译器将注释记录在class文件中,运行java程序时,jvm保留注释,可以通过反射获取这歌注释 RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注释 eg: //定义下面的Testable Annotation保留到运行时 @Retention(RetentionPolicy.RUNTIME) public @interface Testable{}
@Target:用于修饰一个Annotation定义,用于被修饰的Annotation能用于修饰那些程序元素 value:ElementType.ANNOTATION_TYPE:指定该策略的Annotation只能修饰Annotation ElementType.CONSTRUCTOR:指定该策略的Annotation能修饰构造器 ElementType.FIELD:指定该策略的Annotation只能修饰成员变量 ElementType.LOCAL_VARIABLE:指定该策略的Annotation只能修饰局部变量 ElementType.METHOD:指定该策略的Annotation只能修饰方法定义 ElementType.PACKAGE:指定该策略的Annotation只能修饰包定义 ElementType.PARAMETER:指定该策略的Annotation可以修饰参数 ElementType.TYPE:指定该策略的Annotation可以修饰类,接口(包括注释类型)或枚举定义 eg:@Target(ElementType.FIELD) public @interface ActionListenerFor{}//这个@ActionListenerFor只能修饰成员变量 @Documented:指定该Annotation修饰的Annotation类将被javadoc工具提取成文档,如果定义Annotation类时使用@Documented修饰, 则所有该Annotation修饰的程序元素的API文档中包含该Annotation说明 eg:@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented public @interface Testable{}//所有使用@Testable Annotation的地方都会被javadoc提取到API文档中
@Inherited:指定被他修饰的Annotation将具有继承性,如果某个类使用A Annotation(定义这个Annotation时使用了@Inherited)修饰,则他的子类自动具有A注释 eg:@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface Testable{}//被这个Annotation修饰的类的子类自动具有这个注释