您当前的位置: 首页 >  ui

梁云亮

暂无认证

  • 3浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【精品】 lombok 注解 之 @Builder和@SuperBuilder

梁云亮 发布时间:2019-12-10 09:22:27 ,浏览量:3

@Builder

@Builder注释为你的类生成复杂的构建器API。

实体类Emp
@Builder
public class Emp {
    private Integer empno;
    private String ename;

    private String job;

    private Integer mgr;

    private LocalDate hiredate;
}
生成代码
public class Emp {
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private LocalDate hiredate;

    Emp(Integer empno, String ename, String job, Integer mgr, LocalDate hiredate) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
    }

    public static Emp.EmpBuilder builder() {
        return new Emp.EmpBuilder();
    }

    public static class EmpBuilder {
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private LocalDate hiredate;

        EmpBuilder() {
        }

        public Emp.EmpBuilder empno(Integer empno) {
            this.empno = empno;
            return this;
        }

        public Emp.EmpBuilder ename(String ename) {
            this.ename = ename;
            return this;
        }

        public Emp.EmpBuilder job(String job) {
            this.job = job;
            return this;
        }

        public Emp.EmpBuilder mgr(Integer mgr) {
            this.mgr = mgr;
            return this;
        }

        public Emp.EmpBuilder hiredate(LocalDate hiredate) {
            this.hiredate = hiredate;
            return this;
        }

        public Emp build() {
            return new Emp(this.empno, this.ename, this.job, this.mgr, this.hiredate);
        }

        public String toString() {
            return "Emp.EmpBuilder(empno=" + this.empno + ", ename=" + this.ename + ", job=" + this.job + ", mgr=" + this.mgr + ", hiredate=" + this.hiredate + ")";
        }
    }
}
@SuperBuilder 父类
@SuperBuilder
public class PageQuery {
    /**
     * 所有查询的字段
     */
    private String columns;

    /**
     * 当前显示的页码
     */
    private Integer pageNum = 1;

    /**
     * 每页的大小
     */
    private Integer pageSize = 10;
}
生成的代码
public class PageQuery {
    private String columns;
    private Integer pageNum = 1;
    private Integer pageSize = 10;

    protected PageQuery(final PageQuery.PageQueryBuilder b) {
        this.columns = b.columns;
        this.pageNum = b.pageNum;
        this.pageSize = b.pageSize;
    }

    public static PageQuery.PageQueryBuilder builder() {
        return new PageQuery.PageQueryBuilderImpl();
    }

    private static final class PageQueryBuilderImpl extends PageQuery.PageQueryBuilder {
        private PageQueryBuilderImpl() {
        }

        protected PageQuery.PageQueryBuilderImpl self() {
            return this;
        }

        public PageQuery build() {
            return new PageQuery(this);
        }
    }

    public abstract static class PageQueryBuilder {
        private String columns;
        private Integer pageNum;
        private Integer pageSize;

        public PageQueryBuilder() {
        }

        protected abstract B self();

        public abstract C build();

        public B columns(final String columns) {
            this.columns = columns;
            return this.self();
        }

        public B pageNum(final Integer pageNum) {
            this.pageNum = pageNum;
            return this.self();
        }

        public B pageSize(final Integer pageSize) {
            this.pageSize = pageSize;
            return this.self();
        }

        public String toString() {
            return "PageQuery.PageQueryBuilder(columns=" + this.columns + ", pageNum=" + this.pageNum + ", pageSize=" + this.pageSize + ")";
        }
    }
}
子类
@SuperBuilder
public class UserQuery extends PageQuery {
    /**
     * 编号
     */
    @ApiModelProperty(value = "编号")
    private Integer id;

    /**
     * 姓名
     */
    @ApiModelProperty(value = "姓名")
    private String name;

    /**
     * 昵称
     */
    @ApiModelProperty(value = "昵称")
    private String nickname;

    public static void main(String[] args) {
        System.out.println(3);
    }
}
生成的代码
public class UserQuery extends PageQuery {
    @ApiModelProperty("编号")
    private Integer id;
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("昵称")
    private String nickname;

    protected UserQuery(final UserQuery.UserQueryBuilder b) {
        super(b);
        this.id = b.id;
        this.name = b.name;
        this.nickname = b.nickname;
    }

    public static UserQuery.UserQueryBuilder builder() {
        return new UserQuery.UserQueryBuilderImpl();
    }

    private static final class UserQueryBuilderImpl extends UserQuery.UserQueryBuilder {
        private UserQueryBuilderImpl() {
        }

        protected UserQuery.UserQueryBuilderImpl self() {
            return this;
        }

        public UserQuery build() {
            return new UserQuery(this);
        }
    }

    public abstract static class UserQueryBuilder extends PageQueryBuilder {
        private Integer id;
        private String name;
        private String nickname;

        public UserQueryBuilder() {
        }

        protected abstract B self();

        public abstract C build();

        public B id(final Integer id) {
            this.id = id;
            return this.self();
        }

        public B name(final String name) {
            this.name = name;
            return this.self();
        }

        public B nickname(final String nickname) {
            this.nickname = nickname;
            return this.self();
        }

        public String toString() {
            String var10000 = super.toString();
            return "UserQuery.UserQueryBuilder(super=" + var10000 + ", id=" + this.id + ", name=" + this.name + ", nickname=" + this.nickname + ")";
        }
    }
}

使用

public static void main(String[] args){
UserQuery query = UserQuery.builder()
			.id(123)
			.name("zhangsan")
			.pageNum(3)
			.pageSize(5)
			.build();
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0450s