Android 注解原理
来源:互联网 发布:《java编程语言》 编辑:程序博客网 时间:2024/05/15 09:54
简介
介绍一下注释类内容:
Documented
是否会保存到 Javadoc 文档中Inherited
是否可以被继承,默认为 falseRetention
注解的保留方式Target
注解的作用范围
Retention
注解的保留方式。如果注释类型声明中不存在 Retention 注释,则保留策略默认为RetentionPolicy.CLASS
RetentionPolicy中的枚举常量简介如下:
CLASS
编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
(保留在源码中,同时也保留到class中,但是不加载到虚拟机中 )RUNTIME
编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
(保留到源码中,同时也保留到class中,最后加载到虚拟机中)SOURCE
编译器要丢弃的注释。
(只保留在源码中,不保留在class中,同时也不加载到虚拟机中 )
Target
注解的作用范围。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。
此元注释指示该声明类型是其自身,即元注释类型。它只能用在注释类型声明上:
@Target(ElementType.ANNOTATION_TYPE)public @interface MetaAnnotationType { ... }
此元注释指示该声明类型只可作为复杂注释类型声明中的成员类型使用。它不能直接用于注释:
@Target({}) public @interface MemberType { ...}
这是一个编译时错误,它表明一个 ElementType 常量在 Target 注释中出现了不只一次。例如,以下元注释是非法的:
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})public @interface Bogus { ...}
ElementType中的枚举常量简介如下:
ElementType.FIELD
注解作用于变量ElementType.METHOD
注解作用于方法ElementType.PARAMETER
注解作用于参数ElementType.CONSTRUCTOR
注解作用于构造方法ElementType.LOCAL_VARIABLE
注解作用于局部变量ElementType.PACKAGE
注解作用于包
简介暂时到这儿...
用法
到了这里我们还是先说说注解的双面性吧,一种是低性能,一种是黑科技!如 xutils , afinal 目前的注入使用的都是运行时注解,这是低性能的代表,当然还有一种黑科技,代表就是我们常用的ButterKnife ...
这里我们先讲一下简单使用:
先创建一个简单的注释类:
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface TestAnnonation { String name() default ""; int Id();}
然后我们简单的使用它:
@TestAnnonation(name = "This is my first comment" , Id = 2017)private void testAnno(){}
通过下面的方法将这个注解打印出来:
private void outputAnnoDetail(Class clazz){ Method [] methods = clazz.getDeclaredMethods(); for(Method method : methods) { TestAnnonation testAnnonation = method.getAnnotation(TestAnnonation.class); if (testAnnonation != null) { Log.d("anonation", "name = " + testAnnonation.name()); Log.d("anonation", "Id = " + testAnnonation.Id()); } }}
结果如下:
name = This is my first commentId = 2017
这是一个运行时注解,注解的作用就是标记一个可以被识别的作用域,可以被其他地方获取解释或者被编译机识别等作用。
下一边博客介绍编译时注解,我们传说中的黑科技…
知识贵在分享!
- Android 注解原理
- Android注解原理与常用注解框架
- Android:注解型框架原理浅析
- Android面试题-注解框架实现原理
- Android注解使用之Annotation实现原理
- 注解原理
- 注解原理
- 注解原理
- 注解原理
- 注解原理
- 注解原理
- 注解原理
- Android注解(annotation)实现绑定事件的原理
- Android 注解和反射原理和实现学习(上)
- Android 注解和反射原理和实现学习(下)
- Android主流IOC框架浅析(Java注解反射原理)
- Android ButterKnife 注解框架的使用详解和原理分析
- Android 2分钟学会xUtils 注解 Annotation(实例+原理)
- 复习总结07:Redis
- yii DAO增删改查
- uboot之makefile分析
- 第11讲项目3-如何买玫瑰
- 浅谈tcp_nodelay的作用
- Android 注解原理
- 大型网站架构之分布式消息队列
- TensorFlow练习(六)——Classification分类学习
- CentOS 7 升级内核
- it's never too late to start a new life
- excel文件拷贝
- MPLAB X IDE如何支持中文注释
- POJ3468 A Simple Problem with Integers 线段树模板
- java在运行时产生一个新的类