返回顶部
首页 > 资讯 > 精选 >3000行代码怎样简化成300行?来,一文来教你!
  • 214
分享到

3000行代码怎样简化成300行?来,一文来教你!

2023-06-04 23:06:55 214人浏览 薄情痞子
摘要

前言APT(Annotation Processor Tool)是用来处理注解的,即注解处理器。APT 在编译器会扫描处理源代码中的注解,我们可以使用这些注解,然后利用 APT自动生成 Java代码,减少模板代

前言

APT(Annotation Processor Tool)是用来处理注解的,即注解处理器。APT 在编译器会扫描处理源代码中的注解,我们可以使用这些注解,然后利用 APT自动生成 Java代码,减少模板代码,提升编码效率,使源码更加简洁,可读性更高。

1、具体场景

下面我将会以项目中常见的 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());

2、搭建 APT 项目

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' 感兴趣的去搜一下具体用法

3000行代码怎样简化成300行?来,一文来教你!

--结束END--

本文标题: 3000行代码怎样简化成300行?来,一文来教你!

本文链接: https://lsjlt.com/news/240246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作