注解是什么?
Java注解(Annotation)又称为Java标注。可以从字面的意思理解它,其实就是一个标注。他可以根据定义作用于不同的地方。注解对他们注解的代码没有直接影响。注解是JDK 5中引入的标注注释机制。
一句话概括:注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。
注解的意义,如何使用注解。
注解就是对某个对象的一个标注。当我们对这个对象有一些特殊需求时,我们可以通过注解区分,来实现这些需求。举个栗子,如butterknife 的view注入、arouter的辅助类生成、反射获取特定信息然后操作等。
public @interface doClick{ } // @interface 创建一个注解
元注解:对注解类的注解。你可以这么简单的理解。元注解有以下几个注解:
@Target 被元注解 注解的注解的作用范围
@Retention 被元注解 注解的注解的存储阶段
@Inherited 被元注解 注解的注解所作用的类是否可以被继承(这里指的是注解能否被继承过去,不是指的类是否可以被继承)一般不使用
@Documented 被元注解 注解的注解所作用的类为工具化文档 一般不使用。
下面主要描述@Target 和@Retention注解
@Target注解:被@Target注解的作用范围
ElementType.ANNOTATION_TYPE 可以应用于注解类型。
ElementType.CONSTRUCTOR 可以应用于构造函数。
ElementType.FIELD 可以应用于字段或属性。
ElementType.LOCAL_VARIABLE 可以应用于局部变量。
ElementType.METHOD 可以应用于方法级注解。
ElementType.PACKAGE 可以应用于包声明。
ElementType.PARAMETER 可以应用于方法的参数。
ElementType.TYPE 可以应用于类的任何元素。
@Retention
RetentionPolicy.SOURCE - 标记的注解仅保留在源级别中,(编译器语法检查)
RetentionPolicy.CLASS - 标记的注解在编译时由编译器保留,但 Java 虚拟机(JVM)会忽略。(在编译时可以通过注解实现一些特殊需求,比如辅助类、脚本、配置文件等。<arouter、butterknife的view注入>)
RetentionPolicy.RUNTIME - 标记的注解由 JVM 保留,因此运行时环境可以使用它。(反射获取注解信息 进行特定的操作)
SOURCE 、CLASS 详见其他框架解析使用.
RUNTIME 结合反射的简单使用。
如有这么一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExtrasParams {Stringvalue()default "";}
@ExtrasParams
public class A extends Activity{
@ExtrasParams
private string name="123";
}
void main(Activity activity){
Class cls=activity.getClass();
Field[] declaredFields=cls.getDeclaredFields();
//循环Field[] 找到被注解的属性或者字段。
for(Field field:declaredFields){
//判断属性是否被 ExtrasParams注解
if (field.isAnnotationPresent(ExtrasParams.class)) {
//获取到ExtrasParams 注解 此时field就是name
ExtrasParams extrasParams = field.getAnnotation(ExtrasParams.class);
.....然后进行你需要的操作。
}
}
}
网友评论