这里重要就是靠收集到的信息,拼接完成的代劳类对象了,看起来会比较头疼,不过我给出一个生成后的代码,比较着看会很多。
- package com.zhy.ioc_sample;
- import com.zhy.ioc.*;
- public class MainActivity$$ViewInjector implements ViewInjector<com.zhy.ioc_sample.MainActivity>{
- @Override
- public void inject(com.zhy.sample.MainActivity host , Object object ){
- if(object instanceof android.app.Activity){
- host.mTv = (android.widget.TextView)(((android.app.Activity)object).findViewById(2131492945));
- }
- else{
- host.mTv = (android.widget.TextView)(((android.view.View)object).findViewById(2131492945));
- }
- }
- }
这里留意下,生成的代码实现了一个接口ViewInjector,该接口是为了同一所有的代劳类对象的类型,到时刻我们须要强转代劳类对象为该接口类型,调用其办法;接口是泛型,重要就是传入实际类对象,例如MainActivity,因为我们在生成代劳类中的代码,实际上就是实际类.成员变量的方法进行拜访,所以,应用编译时注解的成员变量一般都不许可private润饰符润饰(有的许可,然则须要供给getter,setter拜访办法)。
这里采取了完全拼接的方法编写Java代码,你也可以应用一些开源库,来经由过程Java api的方法来生成代码,例如:javapoet.
- A Java API for generating .java source files.
到这里我们就完成了代劳类的生成,这里任何的注解处理器的编写方法根本都遵守着收集信息、生成代劳类的步调。
五、API模块的实现
- //Activity中
- Ioc.inject(Activity);
- //Fragment中,获取ViewHolder中
- Ioc.inject(this, view);
模仿了butterknife,第一个参数为宿主对象,第二个参数为实际调用findViewById的对象;当然在Actiivty中,两个参数就一样了。
API一般若何编写呢?
有了代劳类之后,我们一般还会供给API供用户去拜访,例如本例的拜访人口是
其实很简单,只要你懂得了其道理,这个API就干两件事:
推荐阅读
栈(stack)又称之为客栈是一个特别的有序表,其插入和删除操作都在栈顶进行操作,并且按照先辈后出,落后先出的规矩进交运作。如下图所示例如枪的弹匣,第一颗放进弹匣的枪弹反而在发射出去>>>详细阅读
地址:http://www.17bianji.com/lsqh/35453.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示