zoukankan      html  css  js  c++  java
  • 使用建造者模式和Lombok简化代码

    在项目开发中,我们经常需要构建对象。常见的做法有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/

  • 相关阅读:
    AJPFX解析成员变量和局部变量
    AJPFX关于Java Object类常用方法小总结
    AJPFX关于面向对象中的对象初始化整理,综合子父类、代码块等等
    AJPFX总结FileWriter类的write方法
    AJPFX总结java创建线程的三种方式及其对比
    java android中日期时间 问题总结
    安卓开发——ListView控件(初始化ListView、列表刷新、长按添加menu)
    android开发分辨率适配总结
    activity生命周期实例(不同启动模式)
    ViewPage最全解析
  • 原文地址:https://www.cnblogs.com/expiator/p/10854141.html
Copyright © 2011-2022 走看看