前言APT(Annotation Processor Tool)是用来处理注解的,即注解处理器。APT 在编译器会扫描处理源代码中的注解,我们可以使用这些注解,然后利用 APT自动生成 Java代码,减少模板代
APT(Annotation Processor Tool)
是用来处理注解的,即注解处理器。APT
在编译器会扫描处理源代码中的注解,我们可以使用这些注解,然后利用 APT
自动生成 Java
代码,减少模板代码,提升编码效率,使源码更加简洁,可读性更高。
下面我将会以项目中常见的 intent 页面跳转为例,给大家演示一下,如何自动生成 intent
代码,以及对getIntent
的参数自动赋值。
要实现上面这个功能我们需要了解
APT
、以及JavaPoet
。如果不太了解的同学可以先去了解一下。
常用写法
Intent intent = new Intent(this,OtherActivity.class); intent.putExtra("name",name); intent.putExtra("gender",gender); startActivity(intent);
数据获取
String name = getIntent().getStringExtra("name",name); String gender = getIntent().getStringExtra("gender",gender);
上述代码很必要但重复性又很高,写多了会烦,又浪费时间。并且在数据传递与获取时 key
值都需要保持一致,这又需要我们新建很多的常量。所以,这里我们希望上述的数据传递与获取可以自动生成。
为了实现这个需求,我们需要实现如下功能:
1)自动为 OtherActivity
类生成一个叫做 OtherActivityAutoBundle
的类
2)使用建造者模式为变量赋值
3)支持 startActivity
或 startActivityForResult
跳转
4)支持调用一个方法即可解析 Intent
传递的数据,并赋值给跳转的 Activity
中的变量
我们需要自动化如下代码:
new OtherActivityAutoBundle() .name("小明") .gender("男") .start(this);//或 startActivityForResult(this,requestCode)
在 OtherActivity 中,自动为变量赋值:
new OtherActivityAutoBundle().bindIntentData(this,getIntent());
a、创建一个 Java Library,并创建注解类
例如:
@Target(ElementType.FIELD) @Retention(RetentionPolicy.CLASS) public @interface AutoBundle { boolean exclude() default false;//不参与 intent、bundle 传值 boolean addFlags() default false;//添加 activity 启动方式 boolean isCloseFroMactivity() default false;//是否关闭 FromActivity boolean isBundle() default false;//是否使用 Bundle 对象传值 boolean isSerializable() default false;//是否是 Serializable 类型 boolean isParcelable() default false;//是否是 Parcelable 类型 boolean isParcelableArray() default false;//是否是 ParcelableArray 类型 boolean isParcelableArrayList() default false;//是否是 ParcelableArrayList 类型 }
b、再创建一个 Java Library,并将上一步 Java Library 添加进来
此时,我们还需要在该 Library 中创建
resources
文件夹;接着在resources
中创建META-INF
和services
两个文件夹;然后在services
中创建一个名为javax.annotation.processing.Processor
的文件。最后在该文件中写入我们注解处理器的全路径。
这里我们也可以使用自动化工具
implementation 'com.Google.auto.service:auto-service:1.0-rc2'
感兴趣的去搜一下具体用法
--结束END--
本文标题: 3000行代码怎样简化成300行?来,一文来教你!
本文链接: https://lsjlt.com/news/240246.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0