文章目录

  • 一、基本 Annotation
  • 1. 限定重写父类方法:@Override
  • 2. 标示已过时: @Deprecated
  • 3. 抑制编译器警告:@Suppress Warning
  • 4. Java7 的“堆污染”警告与 @Safe Varargs
  • 5. Java8 的函数式接口与 @FunctionalInterface
  • 二、JDK 的元 Annotation
  • 1. 使用 @Retention
  • 2. 使用 @Target
  • 3. 使用 @Documented
  • 4. 使用 @Inherited
  • 三、自定义 Annotation
  • 1. 定义 Annotation
  • 2. 提取 Annotation 信息



一、基本 Annotation

  • Annotation 其实是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。
  • Java 提供的五个基本的 Annotation:
    ① @Override
    ② @Deprecated
    ③ @Suppress Warning
    ④ @Safe Varargs
    ⑤ @FunctionalInterface
  • 使用 Annotation 时要在其前面增加 @ 符号,并把该 Annotation 当做一个修饰符使用,用于修饰它支持的程序元素;

1. 限定重写父类方法:@Override

  • @Override 就是用来指定方法覆载的,它可以强制一个子类必须覆盖父类的方法;
  • @Override 只能修饰方法,不能修饰其他程序元素;

2. 标示已过时: @Deprecated

  • @Deprecated 用于表示某个程序元素已过时,当其他程序使用已过时的类、方法等,编译器会给出警告;

3. 抑制编译器警告:@Suppress Warning

4. Java7 的“堆污染”警告与 @Safe Varargs

5. Java8 的函数式接口与 @FunctionalInterface

二、JDK 的元 Annotation

1. 使用 @Retention

  • 用于指定被修饰的 Annotation 可以保留多长时间;

2. 使用 @Target

  • 用于指定被修饰的 Annotation 可以修饰哪些程序单元;

3. 使用 @Documented

  • 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档;

4. 使用 @Inherited

  • 用于指定它被修饰的 Annotation 将具有继承性;

三、自定义 Annotation

1. 定义 Annotation

  • 定义新的 Annotation 类型使用 @interface 关键字,与定义一个接口非常像;
//定义一个简单的 Annotation 类型
public @interface Test{

}
//使用 @Test 修饰类定义
@Test
public class MyClass{

}
public class MyClass{
	//使用 @Test Annotation修饰方法
	@Test
	public void info(){

	}
}

2. 提取 Annotation 信息

  • 使用 Annotation 修饰了类、方法、成员变量之后,这些 Annotation 不会自己生效,必须由开发者提供相应的工具来提取并处理 Annotation 信息;
  • Java 使用 Annotation 接口来代表程序元素前面的注释,该接口是所有注解的父接口;
  • AnnotatedElement 接口是所有程序元素的父接口,所以程序通过反射获取了某个类的 AnnotatedElement 对象之后,程序就可以调用对象的方法来访问 Annotation 信息;