SubBuilder使用

自己开发了一个小工具,这是使用文档。项目地址:https://github.com/FrancisYuric/SubBuilder.git。

解决痛点

SubBuilder的使用还是相对比较简单不是那么复杂,主要是为了解决并简化如下类型的代码。

private void test() {this.setMessageA("A");this.setMessageB("B");this.setMessageA("A");this.setMessageA("A");this.setMessageA("A");this.setMessageA("A");this.setMessageA("A");this.setMessageA("A");
}

是不是感觉非常麻烦,为什么同样是对于同一个this对象,我们还是非要不厌其烦地一遍接一边地对其进行重复?当然不需要,这个工具的目的就是基于APT来达成类的强制链式调用,如下,我们可以看见代码量明显减少了,然后java中最恼人的每行的;也不用专门去维护了。如下的代码和上面的代码实际的执行效果是一样的,仅仅是下面这样的写法我个人感觉更加的简洁。

private void test() {this.subBuilder()//切换到构造类.setMessageA("A").setMessageB("B").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A");//.build();//转换会构造类
}

使用方法

具体的使用主要分为三步:

  1. 对于目标类添加BuilderClass注解,然后执行编译,因为代码生成逻辑实际上是基于APT来进行的。

    @BuilderClass
    public class TestBean implements ISubBuilder<SubTestBean> {
    

    这个时候其实已经可以进行方法转换了,只是转换的方式会比较麻烦。

    SubTestBean(testBean)
    
  2. 这样使用起来非常麻烦不是吗?所以这里就需要实现ISubBuilder接口,其中的泛型就是我们当前的目标类名加上Sub前缀,这个类是基于APT直接生成的。来看看怎么实现,就是将上述的麻烦的部分封装到方法里面就行了。

    @Override
    public SubTestBean subBuilder() {return SubTestBean.__create(this);
    }
    
  3. OK,也就是说已经可以在项目中进行这样的操作了,通过subBuilder()方法可以将a转换成他的构造者类,然后可以通过.builder()切回a类型的实例。

    private void test() {a.subBuilder().setMessageA("A").setMessageB("B").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A").setMessageA("A");//.build()
    }
    

SubBuilder使用相关推荐

  1. 通过apt自动生成建造者模式单线程版代码(三)

    回来继续讲这个效果是怎么实现的,顺便说一句,我是一个菜鸟,不喜欢高手在我面前秀优越,得意洋洋地说什么实现方法很无知之类的,却并不拿出更好的方法来交流,可怜人,要是时间实在太多可以去搬搬砖,锻炼身体还赚 ...

  2. 通过apt自动生成建造者模式单线程版代码(二)

    好了,讲正事,这个是我实现的效果,使用只需要添加简单的一个注解就行了 @BuilderClass public class TestBean {String messageA;String messa ...

  3. 通过apt自动生成建造者模式单线程版代码(一)

    不知道你是否和我一样有代码洁癖,不知道你是否和我一样有同种类型的代码洁癖. 下面描述一下我的症状,当我看见有完全相同的调用逻辑时,总有一种难以言表的不适,有一种强烈的,想把重复的逻辑抹去的冲动. 最初 ...

  4. 论Flutter开发如何改善套娃地狱问题

    /   今日科技快讯   / 近日,滴滴旗下自动驾驶公司宣布与广汽埃安新能源汽车有限公司达成战略合作.滴滴出行董事长兼CEO程维与广汽集团董事长曾庆洪,共同见证签约仪式. /   作者简介   / 本 ...

  5. Flutter 改善套娃地狱问题(仿喜马拉雅PC页面举例)

    前言 这篇文章是我一直以来很想写的一篇文章,终于下定决心动笔了. 写Flutter的小伙伴可能都感受到了:掘金的一些热门的Flutter文章下,知乎的一些Flutter的话题下或者一些论坛里面,喷Fl ...

最新文章

  1. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)
  2. 二流四流神经网路(模型融合矩阵乘法理论实践)
  3. css(面试第2天)用css绘制三角形
  4. [转摘] JSP连接SQL SERVER问题总结
  5. GridView中的RadioButton列之间不能互斥
  6. CTFshow 命令执行 web69
  7. 一个jstack/jmap等不能用的case
  8. Paper:关于人工智能的所有国际顶级学术会简介(IJCAI、ICLR、AAAI 、COLT、CVPR、ICCV 等)之详细攻略(持续更新,建议收藏!)
  9. (仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
  10. 多继承-注意父类之间注意不要有重名方法或属性
  11. 链上存证、链下传输的可信数据共享平台
  12. cli vue 外部js 引入 文件_javascript - vue cli构建的项目中,vue组件里怎么引入外部js文件里的方法...
  13. 微信群怎么设置验证加入_怎么让微信群裂变拉人/拉人进群奖励方案/微信裂变营销方案策划...
  14. 推荐一个CSLab------英真时代(非广告,真心的)
  15. 【面向对象】第三单元规格化设计总结——JML
  16. 向日葵远程软件连接Ubuntu无法显示桌面之解决方案
  17. ubuntu 局域网连接
  18. 最易理解的C语言教学 第一章
  19. 说出数据连接池的工作机制是什么?
  20. Flutter第一部分(UI)第二篇:在Flutter中构建布局

热门文章

  1. Jenkins持续集成输出html测试报告
  2. python连接redis有中文_Python连接Redis并操作
  3. python五子棋单机版源代码_python实现单机五子棋
  4. rds本地库到rds恢复_rds数据库 恢复本地
  5. 尾气冒黑烟是什么问题_对机动车环保检测尾气排放的了解!
  6. 配置LNMP遇到的问题(页面空白,不能解析php等)以及fastcgi和php-fom的关系
  7. php的服务器变量$SERVER以及防止$_SERVER['PHP_SELF']造成的XSS漏洞攻击及其解决方案
  8. 【Virtual Judge】The 2019 China Collegiate Programming Contest Harbin Site-Keeping Rabbits
  9. python基础练习(九)
  10. 机器人末端执行器气爪怎么吸合_平行气爪工作原理是什么?平行气爪原理图作用是什么...