在项目开发中,我们经常需要构建对象。常见的做法有getter/setter,或者构造器构建对象。

可能会有人写出类似如下的代码:

Company company=new Company();
company.setAgentId(agentId);
company.setAgentUserId(agentUserId);
company.setCompanyName( companyName );
company.setAgentUserName(agentUserName);
company.setDomain( domain );
company.setTaxNo( taxNo );
company.setCreateTime( new Date() );
company.setIsauth(1);
company.setActivationCode(activationCode);
company.setAuthCode(authCode);
company.setDomain(domain);
company.setUseType(1);
company.setContactor(phoneNumber);

也可能写了一个参数非常冗长,传参特别容易出错的构造方法。

Lombok注解

我们可以使用Lombok和建造者模式简化代码。

(注意,Lombok除了要加入依赖包,还需要配置一下。几分钟可以搞定,具体做法请百度。)

如果你的同事不喜欢用Lombok,或者你想了解一下Lombok注解所表示的代码块,你可以在安装插件后,通过选择IDEA导航栏的"Refactor"---"Delombok"将Lombok注解逆向生成代码。

首先,在Company类上方加入Lombok注解,如下所示:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor(staticName = "getCompany")
public class Company {
private Integer agentUserId;
@NonNull
private Integer agentId;
private String companyName;
private String agentUserName;
private String domain;
private String taxNo;
private Date createTime;
private Integer isAuth;
private String activationCode;
private String authCode;
private Integer userType;
private String phoneNumber;
}

其中的注释意思如下:

@Builder:可通过Builder模式构建对象。
@NonNull:变量不能为空
@Data:包含了getter、setter、toString、equals、hashcode方法。
@NoArgsConstructor : 生成一个无参数的构造方法。
@AllArgsContructor: 会生成一个包含所有变量的构造方法。
@RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。
@RequiredArgsConstructor(staticName = "getCompany"):生成的构造方法是private,外部可以使用static方法访问。

如果不理解,我们可以选择IDEA导航栏的"Refactor"---"Delombok"逆向生成代码。

只加注解@RequiredArgsConstructor表示的代码如下,由于只有变量agentId为@NonNull,所以构造方法只有这个变量:

    public Company(Integer agentId) {
this.agentId = agentId;
}

使用注解@RequiredArgsConstructor(staticName = "getCompany")表示的代码如下:

    private Company() {
} public static Company getCompany() {
return new Company();
}

Builder模式构建对象

加入了@Builder后,那么可以将代码改写成如下:

   Company company=Company.builder().agentId(1).agentUserId(1).companyName("google")
.agentUserName("lin").domain("test").taxNo("1111111").createTime(new Date())
.isAuth(1).activationCode("0587-1235").userType(1).phoneNumber("666666666")
.build();

基本形式就是: 类名.builder().build() ,在中间加入变量方法及变量的具体值。

通过这种方式构建对象,没有那么多的setter,参数也不容易出错。

参考资料:

http://kriszhang.com/lombok/

使用建造者模式和Lombok简化代码的更多相关文章

  1. 使用 lombok 简化代码

    使用前的准备 1.Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的.  <1>添加 ...

  2. 使用lombok 简化代码

    第一步:添加依赖 第二步:下载 lombok  jar 包 第三步 :打开cmd 命令行 执行命令, -javaagent:lombok.jar -Xbootclasspath/a:lombok.ja ...

  3. 设计模式-05建造者模式(Builder Pattern)

    1.模式动机 比如我们要组装一台电脑,都知道电脑是由 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘和鼠标组成,其中非常重要的一点就是这些硬件都是可以灵活选择,但是组装步骤都是大同小异(可以组一个 ...

  4. 我的强迫症系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  5. 设计模式实战系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  6. 建造者模式与原型模式/builder模式与prototype模式/创建型模式

    建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

  7. Idea使用Lombok简化实体类代码

    引入相应的maven包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lo ...

  8. lombok 简化java代码注解

    lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...

  9. Lombok简化Java代码

    导包:import lombok.Data; Lombok简化Java代码: 在Lombok中,生成构造方法的annotation一共有三个:@NoArgsConstructor, @Required ...

随机推荐

  1. springCloud学习5(Spring-Cloud-Stream事件驱动)

    springcloud 总集:https://www.tapme.top/blog/detail/2019-02-28-11-33 代码见文章结尾   想想平常生活中做饭的场景,在用电饭锅做饭的同时, ...

  2. Nginx 反向代理Tomcat服务器获取真实IP问题

    1.nginx.conf 配置 修改 Server location配置 增加 proxy_set_header X-Real-IP $remote_addr; #保留代理之前的真实客户端ip pro ...

  3. springmvc跨域问题的解决

    如果只想对某个方法开启跨域设置: controller上添加注解: @CrossOrigin(maxAge = 3600) 在特定的方法上添加注解: @CrossOrigin("*" ...

  4. CSS的一个小bug,Gradient has outdated direction syntax. New syntax is like `to left` instead of `right`.

    在vue重新渲染页面的时候,报了一个错误: 翻译了报错信息后,Gradient has outdated direction syntax. New syntax is like to left in ...

  5. Java开发环境之JDK

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 零章:JDK安装教程 1)下载JDK安装包 http://www.oracle.com/technetwork/java/ ...

  6. Arm Qt编译Qt例程出错 GLES3/gl3.h: No such file or directory 解决方法

    工作环境 PC:Ubuntu18.04QtCreator: 4.8.2交叉编译环境:野火imxull6开发板提供的 5-编译工具链->qt交叉编译工具 在之前博客配置成功的交叉编译环境,编译Qt ...

  7. 2013.9.3 - OpenNER第十一天

    下午接受了天猫某高管的交叉面试,在图书馆电面的,感觉面的不怎么好,他先问了我飞天的情况,还有我做了什么,他感觉和我聊不到一起去,我感觉应该是下午在地下铁喝的那杯咖啡让我慌了神,后来他又问了大数组抽取最 ...

  8. HTML常用全部代码--第二部分--JAVASCRIPT( 小伙伴要牢记😁😁😁😁 )

    html代码大全--js部分:小技巧 (1) 点击关闭窗口<a href="javascript.:top.window.close();">点击关闭窗口</a& ...

  9. python内建模块发起HTTP(S)请求

    一.Python2 httplib 简介:httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现. ...

  10. jupyter notebook中导入其他ipynb文件中的代码

    %%capture %run "../Untitled Folder 3/2nn.ipynb" %%capture 抑制输出%run "../Untitled Folde ...