文章目录

  • 一。简介
  • 二。场景模拟
  • 三。java实现
  • 四。使用lombok插件进行优化

一。简介

1.我们在构建对象的时候,如果对象属性比较多,我们可以

  1. 使用一个构造器;
  2. 一个空的构造器,然后使用setter方法进行设置。

使用这些方法时会有冗长的构造函数或者setter方法,有不同参数默认值的构造函数需要多次定义,因此我们可以使用builder来简化代码的简介性。

2.那么什么是Builder呢?

它其实是一种设计模式,叫做建造者模式,它的含义是将一个复杂的对象的构建与它的表示分离,同样的构建过程可以创建不同的表示:

二。场景模拟

假如有一结果api结果返回值的类Result,其在代码中频繁被使用:

public class Result<T> {private int code;private String message;private T data;public Result(int code, String message, T data) {this.code = code;this.message = message;this.data = data;}public Result() {}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getData() {return data;}public void setData(T data) {this.data = data;}@Overridepublic String toString() {return "Result{" +"code=" + code +", message='" + message + '\'' +", data=" + data +'}';}
}

如果要使用它,一般的方法是:

public class Main {public static void main(String[] args) {//方法1,使用全量的构造函数Result<String> result1 = new Result<>(200, "success", "");//方法2,使用空的构造函数加setter函数赋值Result<String> result2 = new Result<>();result2.setCode(200);result2.setMessage("success");result2.setData("");}
}

这两种使用方法的弊端有:

(1)方法一:当只需要部分参数的时候需要再定义个构造函数(比如失败的情况只需要code和message,结果肯定是空,因此不需要data),且一旦参数较多,则构造函数冗长;

(2)方法二:setter冗长;

因此我们需要builder来解决这个问题

三。java实现

Result增加Builder类:

    public static final class Builder<T> {private int code;private String message;private T data;private Builder() {}public Builder code(int val) {code = val;return this;}public Builder message(String val) {message = val;return this;}public Builder data(T val) {data = val;return this;}public Result build() {return new Result(this);}}

使用:

Result<String> result3 = new Result.Builder<>().code(404).message("failure").build();
Result<String> result4 = Result.newBuilder().code(404).message("failure").build();

四。使用lombok插件进行优化

优化后:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {private int code;private String message;private T data;
}

使用:

Result<String> result5 = Result.<String>builder().code(404).message("failure").build();

java中的.builder()方法实现详解相关推荐

  1. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  2. Java中lombok @Builder注解使用详解

    简介 Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get.set方法.构造器.equal.toString方法的时间.除此之外,通过@Builder注解,lombo ...

  3. java中的getClass()方法的详解

    getClass()返回运行时的类: 1.示例代码: package com.dbzhang.demo4;public class Person {int id;private String name ...

  4. Java中Lambda表达式使用及详解

    Java中Lambda表达式使用及详解 前言 一.Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中.使 ...

  5. python find的使用方法_Python中的rfind()方法使用详解

    Python中的rfind()方法使用详解 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以 ...

  6. Java中的异常和处理详解

    Java中的异常和处理详解 参考文章: (1)Java中的异常和处理详解 (2)https://www.cnblogs.com/lulipro/p/7504267.html 备忘一下.

  7. python中sort函数字符串_python中的sort方法使用详解

    < Python树莓派编程>--3.3 Python入门 本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfr ...

  8. python的sort方法是哪种_python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可 ...

  9. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

最新文章

  1. 《数字逻辑设计与计算机组成》一3.3 加法器
  2. python画简单图片-Python绘制“高颜值”桑基图
  3. STM32 电机教程 7 - 步进电机开环速度控制
  4. LeetCode 26.删除排序数组中的重复项
  5. 铃木uy125最高时速_五菱宏光mini EV月销三万辆,铃木是否后悔退出中国?
  6. 信息学奥赛一本通(1409:判决素数个数)
  7. Debian、Ubuntu源码编译制作安装包(一)
  8. 远程桌面连接服务器,提示身份验证错误,要求的函数不受支持,但又找不到加密Oracle修正
  9. Ubuntu PIL 安装
  10. 常用化学消毒剂使用方法
  11. 【原创】SSAS-引用维度与多数据源、多数据源视图引发分区错误
  12. 自抗扰控制器七-二阶 LADRC-PLL 结构设计
  13. VirtualBox 安装增强功能
  14. WDS功能及中继与桥接模式的区别.
  15. 图像区块分割与采样YUV4:2:0
  16. 【Eslint + Prettier + Husky + Commitlint】前端项目代码规范的搭建
  17. 2288H v5服务器恢复IBMC默认密码方法与步骤
  18. Gitlab访问突然出现 403 forbidden解决方案
  19. Yura and Developers
  20. 纳豆红曲的功效与作用是什么?

热门文章

  1. 更改netbios计算机名,如何修改NetBios computer name,使得与计算机名稱统一
  2. 基于 Netbios 发现内网存活主机
  3. 2022年全球市场医用激光系统总体规模、主要生产商、主要地区、产品和应用细分研究报告
  4. java replaceall 问号_ReplaceAll 特殊字符处理
  5. 2018-8-10-使用-ahk-让普通键盘变为Dvorak键盘
  6. Java时间工具类,获取日、周、旬、月、季度、半年、年等时间周期
  7. Knife4j 2.0.8发布,史诗级微服务聚合文档中间件诞生
  8. STM32F4---PWM输出
  9. fusioncharts java_FusionCharts在Java中的基本使用
  10. GPUAnimation的Mesh动画烘焙到贴图,学习笔记