注解的使用
参考资料:https://www.liaoxuefeng.com/wiki/1252599548343744/1265102413966176 。
一 简介
-
可使用范围:类、方法、字段、参数。
-
类型(大致三类):
1 编译器使用的注解
这类注解不会被编译进入.class文件,它们在编译后就被编译器扔掉了。比如:@Override、@SuppressWarnings。
2 由工具处理.class文件使用的注解
有些工具会在加载class的时候,对class做动态修改,实现一些特殊的功能。这类注解会被编译进入.class文件,但加载结束后并不会存在于内存中。这类注解只被一些底层库使用,一般我们不必自己处理。
3 在程序运行期能够读取的注解
它们在加载后一直存在于JVM中,这也是最常用的注解。
二 自定义注解
1 定义注解
使用 @interface
修饰,且每个值都需要设置默认值。
public @interface Figo {
String name() default "rw";
String desc() default "说明";
}
2 定义注解的应用位置
使用 @Target
可以定义Annotation能够被应用于源码的哪些位置。
- 类或接口:ElementType.TYPE;
- 字段:ElementType.FIELD;
- 方法:ElementType.METHOD;
- 构造方法:ElementType.CONSTRUCTOR;
- 方法参数:ElementType.PARAMETER。
//@Target({ElementType.METHOD,ElementType.FIELD})
@Target(ElementType.METHOD)
public @interface Figo {
String name() default "rw";
String desc() default "说明";
}
3 定义注解的生命周期
使用 @Retention
定义了Annotation的生命周期。如果@Retention不存在,则该Annotation默认为CLASS。因为通常我们自定义的Annotation都是RUNTIME,所以