不知道你是否和我一样有代码洁癖,不知道你是否和我一样有同种类型的代码洁癖.

下面描述一下我的症状,当我看见有完全相同的调用逻辑时,总有一种难以言表的不适,有一种强烈的,想把重复的逻辑抹去的冲动.

最初是怎么解决的呢?

比如说这样一个类


public class TestBean {String messageA;String messageB;public String getMessageA() {return messageA;}public void setMessageA(String messageA) {this.messageA = messageA;}public TestBean(String messageA, String messageB) {this.messageA = messageA;this.messageB = messageB;}public String getMessageB() {return messageB;}public void setMessageB(String messageB) {this.messageB = messageB;}
}

如果我需要调用他的方法逻辑的时候,只能通过这样的方式

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

一般人感觉很正常,这不就是面向对象的基本数据操作方式吗,很简单啊,也很正常,没有违和感啊.

但是你有没有觉得这样还是很废话吗?我知道java的特点之一就是易上手,但是同时,易上手的含义就是包含了很多为了让人更好入门的重复逻辑和方法,或者说是表达方式和字段

我理想中的语言是一切信息只出现过一次即可,不需要进行重复暗示,这才是计算机,这才是智能不是吗?好了,扯远了,回过来看看我们今天的主题.

最开始我想到的方法是函数式编程,看看能不能简单一些,但是当我知道了RxJava,才发现其实有人已经玩过这条路了,而且玩的很不错.基本的操作是不断地在其实doOnNext方法中去执行对操作对象的操作.

具体的操作方式是这样的,OK...实例化对象的确消失了,但是引入了更长的方法名和形参,捡了芝麻丢了西瓜,得不偿失,就没有一点意思了.

private void test1() {Flowable.just(1).doOnNext(integer -> {}).doOnNext(integer -> {});
}

那么,有没有一种方法能够实现这样的效果呢?或者说能平息我的洁癖症的方法到底是什么呢?经过一番思索我想到了.可能是因为最近在看android插件化的适配问题,这给了我一些灵感吧

首先是思路,通过建造者模式,因为这个模式相当顺滑,其次是能实现链式调用的效果.

先给出效果,在后续的文章中我再给出实际的实现方式.当然,你会说,我吃了空啊,等你的Builder类代码写完,天都黑了!我还是乖乖地多写几个字母都比写这种样式好.

好吧,如果你这么觉得,我不建议你看下去,勤奋的程序员啊,真的建议你学会偷懒.只有懂得节约才能更好地挥霍,这个道理浅显易懂.

@BuilderClass
public class TestA {int a;int b;public static void main(String[] arg) {TestA testA = new TestA(1, 2);testA.subBuilder().setA(2).setB(4);}public int getA() {return a;}public void setA(int a) {this.a = a;}public int getB() {return b;}public void setB(int b) {this.b = b;}public TestA(int a, int b) {this.a = a;this.b = b;}public SubTestA subBuilder() {return SubTestA.__create(this);}
}

的确,这样的方式的确很傻,那么有没有方法能解决这个问题呢?

当然有啦,不然我写这个文章不是浪费大家时间呢= =

通过apt自动生成建造者模式单线程版代码(一)相关推荐

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

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

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

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

  3. html提交列表编号自动生成目录,解析 Html 自动生成目录 TOC 的相关代码

    解析 Html 自动生成目录 TOC 的相关代码 相关代码function create_content_TOC(dom, config, target) { let hList = dom.find ...

  4. java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签

    本文实例讲述了JSP实现用于自动生成表单标签HTML代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkBox,select,radi ...

  5. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...

    本文实例讲述了JSP实现用于自动生成表单标签html代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkbox,select,radi ...

  6. jeecg-boot自动生成代码_一款自动生成唯一头像的开源代码库

    很多网站会给默认登陆的用户生成默认的头像,包括 GitHub 其实就有,你想知道是怎么实现的么? 今天的推荐的就是一个能够按唯一 Email.ID 或者用户名生成唯一头像的开源代码库:generate ...

  7. Intellij idea generate builder 插件-用于自动生成builder模式代码

    2019独角兽企业重金招聘Python工程师标准>>> 目的:开发中喜欢builder模式去构造一个实例,而当一个对象的属性过多的时候,手动的去完成一个类的builder是很繁琐的: ...

  8. Android-黄油刀ButterKnife依赖注入源码,APT自动生成代码,利用javapoet语法搭建编译环境,建立MVP中空指针的保护机制

    基本环境搭建(auto&javapoet) 一.API采取背景,举例 主要为了解决客户端MVP架构中,V层和P层生命周期不同步时,生成空View保护性逻辑. 之前需要手写空View的代码,现在 ...

  9. 修改自动生成get/set方法模板代码

    今天看到 面对接口脏数据你还在V层if str==null else setText? 一文,觉着写得挺好,开发过程中多思考多动手,会带来意想不到的效果.底下评论大家也都说了各自的方法和见解,文中有一 ...

最新文章

  1. C/C++实现sleep函数
  2. iptables中关于limit和limit-burst的解释
  3. mysql 函数重载_[赋值]函数,变量,重载 ,_第1页_169IT
  4. 车辆行人识别训练与部署,EasyDL-Jetson Nano 端边云协作专场公开课
  5. python实现使用最近最久未使用算法的请求分页存储管理_答疑(存储管理)之一...
  6. Android4.0升级新特性
  7. 1002 C语言输入解决方案
  8. python特性 property_python特性property
  9. 经典书单 —— 机器学习/深度学习/AI/CV/PGM
  10. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  11. 【学习笔记】尚硅谷大数据项目之Flink实时数仓---数据采集
  12. C语言队列解决舞伴匹配问题
  13. 【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
  14. python数据挖掘项目——航空公司客户价值分析(详解)
  15. 【0CTF/TCTF2021预选】[Misc] pypypypy Sloth writeup python字节码编程
  16. 网络狂飙2(netspeeder2) v2.0 游戏版 怎么用
  17. 望京有没有可能成为下一个硅谷?
  18. 局域网远程桌面工具推荐
  19. 112-RTKLIB中关于dcb文件读取的问题
  20. ArcGIS之多个GDB批量导出shp至特定文件夹20201228

热门文章

  1. python数据库编程 代码 源码_Python可以这样学_Python教程
  2. getprivateprofilestring读不到数据_电商系列(三)如何构建数据库的主从架构!
  3. 腾讯后台开发面试题--整理1
  4. Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法
  5. dell服务器630虚拟盘初始化,DELL服务器配置Raid的步骤
  6. 计算机类专计算机网络基础与应用,2016年秋季学期计算机专业《计算机网络基础(专)》第一次语音答疑.ppt...
  7. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制
  8. elasticsearch 查看索引_ELK技术栈之ElasticSearch(一)
  9. 输出两个整数中最大的书c语言,c语言程序设计实验指中导书-2.doc
  10. 如何做到微信机器人不封号_微信如何做到一键群发所有群