在学习注解处理器之前,我们要先了解一下什么是注解,Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。对于注解,大家一定不会陌生,在我们Android方面有很多成熟的框架都是通过注解实现的 像是比较常用的 Retrofit、ButterKnite等等。那么对于注解又有哪些知识呢?
一、注解的分类
1、JDK内置注解
1.@Override
重写注解 算是我们最常见的一个注解之一了吧 ,当我们继承某个类重写方法的时候就会带有这个注解,表示重写父类的方法,在父类的该方法被删除或者复写父类不存在的方法时编译错误 提醒开发者进行修正。
2.@Deprecated
过时注解 当我们的某个方法不适用于新版本或者有了新的实现的时候可以使用该注解提醒使用者该方法已过时,提醒使用者注意使用更好的方法实现。
3.@SuppressWarnings
去除编译器警告注解 我们程序员中某些童鞋可能回事强迫症患者,看到黄色警告就会心烦意乱,该注解会让一些 比如unused警告 泛型转换警告消失等。
2、元注解
1.@Target 表示注解的使用范围 类、方法
public enum ElementType {
TYPE, // 使用在类上
FIELD,// 使用在属性上
METHOD,//使用在方法上
PARAMETER,//使用在参数上
CONSTRUCTOR,// 使用在构造方法上
LOCAL_VARIABLE,// 使用局部变量上
ANNOTATION_TYPE,// 使用在注解上
PACKAGE,// 使用在包上
TYPE_PARAMETER,// 使用输入参数上
TYPE_USE;// 使用一个类型
private ElementType() {
}
}
2.@Retention
public enum RetentionPolicy {
/**
* 只存活在源码中
*/
SOURCE,
/**
* 存活到编译阶段
*/
CLASS,
/**
* 存活到运行环境,可以通过反射获取
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
3.@Documented
是否将注解编入到doc中
4.@Inherited
表示这个注解是继承于哪个注解类
3、自定义注解
在我们使用的一些框架上 经常会有各种各样的自定义注解
例如 EventBus :@Subscribe
Retrofit:@Post/@Get
等等
二、自己编写一个注解
1、编写注解
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target({ElementType.TYPE, ElementType.FIELD})
public @interface Bubble {
String name() default "123";
}
2、使用注解
@Bubble(name = "Bubble1")
public class Bubble1 implements IBubble {
@Override
public String getBubble() {
return "Bubble1";
}
}
@Bubble
public class Bubble2 implements IBubble {
@Override
public String getBubble() {
return "Bubble2";
}
}
3、运行
@Test
public void testAnnotation() {
Bubble annotation = Bubble1.class.getAnnotation(Bubble.class);
Bubble annotation2 = Bubble2.class.getAnnotation(Bubble.class);
if (annotation != null) {
System.out.println("name: " + annotation.name());
}
if (annotation != null) {
System.out.println("name: " + annotation2.name());
}
}
4、运行结果

网友评论