在项目开发中,咱们常常须要构建对象。常见的作法有getter/setter,或者构造器构建对象。
可能会有人写出相似以下的代码:dom
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);
也可能写了一个参数很是冗长,传参特别容易出错的构造方法。ui
咱们能够使用Lombok和建造者模式简化代码。
(注意,Lombok除了要加入依赖包,还须要配置一下。几分钟能够搞定,具体作法请百度。)
若是你的同事不喜欢用Lombok,或者你想了解一下Lombok注解所表示的代码块,你能够在安装插件后,经过选择IDEA导航栏的"Refactor"---"Delombok"将Lombok注解逆向生成代码。
首先,在Company类上方加入Lombok注解,以下所示:this
@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; }
其中的注释意思以下:google
@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")表示的代码以下:code
private Company() { } public static Company getCompany() { return new Company(); }
加入了@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/get