文章目录
- 一、基本 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 信息;