【Java】の基础——注解
Java注解
注解的作用
生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等,这点都很熟悉,不就是生成自己的API嘛。
跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。
在编译时进行格式检查。如@Override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
Java常见注解
@Override
子类对父类方法的重写所带的注解,这个笔者就不多说啦!简单
@Deprecated
表示已经过时,不建议使用,但是依然可以使用
@SuppressWarnings
用来抑制编译时的警告信息
元注解:注解的注解
自定义注解使用关键字@interface
自定义注解配合注解处理器(反射)使用。
Android ButterKnife 注解框架
- 强大的View绑定和Click事件处理功能,简化代码,提升开发效率
- 方便的处理Adapter里的ViewHolder绑定问题
- 运行时不会影响APP效率,使用配置方便
- 代码清晰,可读性强
ButterKnife的工作流程
在编译你的Android工程时,ButterKnife工程中ButterKnifeProcessor类的process()方法会执行以下的操作:
- 开始它会扫描Java代码中的所有ButterKnife注解,然后生成以TypeElement为Key,BindingClass为value的Map;
- 遍历生成的Map,当发现其中含有任何一个ButterKnife支持的注解后,会通过Filer来生成对应辅助类的.java文件,这个辅助类是以$$ViewBinder为后缀的,并且实现了ViewBinder接口(bind(包含了控件的实例化和设置点击事件等操作的代码)和unbind方法)
- 最后当Activity启动,ButterKnife.bind(this)执行时,会根据类对应的Class类型去查找对应类的ViewBinder类是否存在于缓存(是使用LinkedHashMap来实现缓存的)中,如果不存在就通过反射创建该ViewBinder类的实例,并将其加入到LinkedHashMap中进行缓存,如果存在就直接从缓存中取出来,然后调用它的bind方法。
- 在bind方法中,会进行控件实例化和设置点击事件等操作。
就这样我们就可以通过bind()方法+注解的方式来简化我们的代码了。