1. 5个基本注解
(1)@override:判断是否重写父类方法,只能修饰方法
(2)@Deprecated:判断类或方法是否过时,两个因素:
forRemoval:boolean类型判断是否会被删除
since:String类型,标记从哪个版本过时
如:
@Deprecated(since=“9”,forRemoval=true)
(3)@SuppressWarnings:抑制编译器警告
如:@SuppressWarnings(value=“unchecked”)
(4)@SafeVarargs:抑制“堆污染”
堆污染:把一个不带泛型的对象赋给一个带泛型的变量(或反过来),如:
List list = new ArrayList<Integer>();
List<String> ls = list;
(5)@FunctionalInterface:指定某个接口必须是函数或接口,只能修饰接口
2. 4个修饰注解的元注解
Java.lang.annotation包下的Meta注解
(1)@Retention:指定被修饰的注解可以保留多长时间
@Retention包含一个RetentionPolicy类型的value成员变量,其指定值有三个:
RetentionPolicy.Class :编译器将把注解记录在class文件中,当运行java程序时,JVM不可获得注解信息。
RetentionPolicy.RUNTIME: 编译器将把注解记录在class文件中,当运行java程序时,JVM可以获得注解信息,程序可以通过反射获取该注解信息。
RetentionPolicy.SOURCE:注解只保留在源代码中,编译器直接丢弃这种注解。
(2)@Target:修饰注解定义,指定修饰哪些程序单元,如@Target(ElementType.FIELD)
Public @interface ActionListenerFor()
(3)@Documented:被修饰的注解类或方法将被javadoc工具提取成文档。
(4)@Inherited:被它修饰的注解将具有继承性,即其子类也默认被@Inherited修饰。
3.自定义注解
如:public @interface Test{…}
关键字为@interface的注解类
注解可用于修饰任何程序元素,包括类、接口、方法等,分为带成员变量的注解和简单注解(无成员变量)。一旦在注解里定义成员变量,就须为成员变量指定值。两种方法:
1)如
@MyTag(name=“Li”, age=6)
public void infor(){…}
2)使用default关键字,如:
public @interface MyTag{
String name() default “yeeku”;
int age() default 32;
}
仅仅使用注解来标记程序元素对程序是不会有影响的,需借助处理工具来分析目标类。
- 利用标记通过反射获取
- 使用注解简化事件编程,绑定事件监听器
重复注解
多个重复注解其实会被作为“容器”注解的value成员变量的数组元素,如:
@FkTags({@FkTag(age = 5),
@FkTag(name = “疯狂Java” , age = 9)
})
可改为
@FkTag(age = 5)
@FkTag(name = “疯狂Java” , age = 9)