java链式编程/级联式编程

2023-10-26

链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。

链式编程: 通过高阶函数以点为连接将多个函数连接在一起完成参数传递和复杂的操作!通俗的说是通过点号(.)链接在一起成为一句代码。

链式编程的优点是:编程性强、可读性强、代码简洁。

举例:

StringBuilder builder = new StringBuilder(96);
builder.append("select id, name from ")
    .append(T_USER)
    .append(" where id = ")
    .append(userId)
    .append(";");

简单举例:

public class User {
    private Integer id;
    private String userName;
    private String password;
    private String nikeName;
    private String email;
    private String phoneNum;

    public Integer getId() {
        return id;
    }

    public User setId(Integer id) {
        this.id = id;
        return this;
    }

    public String getUserName() {
        return userName;
    }

    public User setUserName(String userName) {
        this.userName = userName;
        return this;
    }

    public String getPassword() {
        return password;
    }

    public String getNikeName() {
        return nikeName;
    }

    public User setNikeName(String nikeName) {
        this.nikeName = nikeName;
        return this;
    }

    public String getEmail() {
        return email;
    }

    public User setEmail(String email) {
        this.email = email;
        return this;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public User setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
        return this;
    }

    public User setPassword(String password) {
        this.password = password;
        return this;
    }
}

调用:

User user = new User();
user.setId(1).setUserName("name").setPhoneNum("pNo").setNikeName("NikeName").setEmail("xxxxx").setPassword("122");

经典模式

package builder;

/**
 * Builder模式,链式调用Demo<br>
 * 
 * @author junehappylove
 *
 */
public class User {

	private final String firstName;
	private final String lastName;
	private final int age;
	private final String phone;
	private final String address;

	private User(UserBuilder builder) {
		this.firstName = builder.firstName;
		this.lastName = builder.lastName;
		this.age = builder.age;
		this.phone = builder.phone;
		this.address = builder.address;
	}

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public int getAge() {
		return age;
	}

	public String getPhone() {
		return phone;
	}

	public String getAddress() {
		return address;
	}
	
	//Builder
	public static class UserBuilder {
		private final String firstName;
		private final String lastName;
		private int age;
		private String phone;
		private String address;

		public UserBuilder(String firstName, String lastName) {
			this.firstName = firstName;
			this.lastName = lastName;
		}

		public UserBuilder age(int age) {
			this.age = age;
			return this;
		}

		public UserBuilder phone(String phone) {
			this.phone = phone;
			return this;
		}

		public UserBuilder address(String address) {
			this.address = address;
			return this;
		}

		public User build() {
			// 由于Builder是非线程安全的,所以如果要在Builder内部类中检查一个参数的合法性,
			// 必需要在对象创建完成之后再检查
			User user = new User(this);
			if (user.getAge() < 0 || user.getAge() > 255) {
				throw new IllegalStateException("Age out of range:" + user.getAge());// 线程安全
			}
			return user;
		}
	}

	public static void main(String[] args) {
		User june = new User.UserBuilder("Wang", "wei").age(18).address("qdao").build()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java链式编程/级联式编程 的相关文章

  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 分享几个项目中用到的设计模式

    前言 之前项目中出于扩展性和有雅性的考虑 使用了多种设计模式进行项目框架的设计 主要的一些设计模式是单例模式 工厂模式 策略模式 责任链模式 代理模式这几种 现在依次讲讲这几个的主要是实现方式和在我们项目中的应用场景 核心设计模式分享 单例
  • java 字符串拼接

    最常用的有4种方法 运算符 如果拼接的都是字符串直接量 则适合使用 运算符实现拼接 public static void main String args method1 字符串拼接 public static void method1 S
  • vim菜鸟学习-中级篇2(经典配置)

    参考资料 http www cnblogs com striveford archive 2011 02 09 1950369 html http blog csdn net xjanker2 article details 5832784
  • 使用CUDA和CUFFT进行快速1D卷积的示例

    使用CUDA和CUFFT进行快速1D卷积的示例 在计算机视觉 数字信号处理和机器学习中 卷积是一种常见的操作 然而 卷积操作通常需要大量计算 因此需要一种高效的方法来完成 CUDA和CUFFT可以用于对使用FFT的快速1D卷积进行加速 在本
  • 面向对象的单片机编程

    1 在看别人单片机程序时 你也许是奔溃的 因为全局变量满天飞 不知道哪个在哪用了 哪个表示什么 而且编写极其不规范 2 在自己写单片机程序时 也许你也是奔溃的 总感觉重新开启一个项目 之前的写过相似的代码也无法使用 得重新敲 代码重用度不高
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • 在Qt Creator中实现Android设备调试

    在Qt Creator中实现Android设备调试 要在Qt Creator中调试和运行Android应用程序 需要先连接设备并设置Qt Creator以使用适当的工具链 本文将介绍如何在Qt Creator中连接Android设备并配置Q
  • Qt QML多线程-WorkerScript的使用

    Qt QML多线程 WorkerScript的使用 在开发过程中 常常会遇到一些需要进行耗时计算的操作 如果这些操作都放在主线程中完成 就会导致UI界面被卡死 用户体验很不好 为了解决这个问题 我们可以将这些耗时计算操作放在一个单独的线程中
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • LabVIEW扫描成像或同步模拟电压生成和数据采集

    大量测量技术涉及探头扫描 同时测量物理量 例如 所有扫描成像方法都是这种情况 因此 数据采集需要高采集率 以及探头控制和测量之间的精确同步 GPScan VI 程序是用于控制 National Instruments 高速数据采集板的通用
  • python能用来做什么?这3大主要用途你一定要知道!(实用)_python能做什么

    导读 如果你想学Python 或者你刚开始学习Python 那么你可能会问 我能用Python做什么 这个问题不好回答 因为Python有很多用途 但是随着时间 我发现有Python主要有以下三大主要应用 Web开发 数据科学 包括机器学习
  • Java监听器与观察者模式

    Java监听器与观察者模式 Java中的监听器 Listener 和观察者模式 Observer Pattern 都是用于处理对象间的事件通知和响应的设计模式 它们的目的是在对象之间建立一种松散的耦合 使得一个对象的状态变化可以通知到其他对
  • C语言是否已经跟不上社会需求?

    今日话题 C语言是否已经跟不上社会需求 一个问题的提出者说 几天前他受到老板的批评 因为他只精通C语言编程 无法满足老板的需求 实际上 C语言在嵌入式行业中仍然具有极高的价值 它高效 可移植 并广泛用于嵌入式系统的开发 然而 嵌入式系统的多
  • Java的引用类型有几种?区别是什么?

    nbsp Java的引用类型有几种 区别是什么 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • 系列一、 单例设计模式

    一 单例设计模式 1 1 概述 单例模式 Singleton Pattern 是Java中最简单的设计模式之一 这种类型的设计模式属于创建者模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只
  • 为什么C语言没有被C++所取代呢?

    今日话题 为什么C语言没有被C 所取代呢 C 的复杂编译器实现和嵌入式平台的限制 使C语言保持了其地位 嵌入式系统多数仅支持C 即使支持C 也会限制某些功能 尤其是异常处理和RTTI 此外 C 引入的功能增加了二进制文件大小和运行时内存占用
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其

随机推荐

  • 2011年,移动互联网加速蔓延 – 来自2011移动开发者大会

    2011移动开发者大会 这是第二届移动开发者大会了 这一年来移动互联网各个领域蔓延开来 蔓延这个词是开复老师演讲的主题 从事塞班开发的请举手 举手者寥寥 记得在去年移动开发者大会上 举手者还有一些 经过一年的蔓延 塞班虽然仍然占有较大的份额
  • hadoop之YARN

    在YARN中 资源调度器 Scheduler 是ResourceManager中的重要组件 主要负责对整个集群 CPU 内存 的资源进行分配和调度 分配以资源Container的形式分发到各个应用程序中 如MapReduce作业 应用程序与
  • 一种消息和任务队列——beanstalkd

    beanstalkd 是一个轻量级消息中间件 其主要特性 基于管道 tube 和任务 job 的工作队列 work queue d 管道 tube tube类似于消息主题 topic 在一个beanstalkd中可以支持多个tube 每个t
  • 《现代加工技术》第1章 绪论

    1 1 加工技术发展简史 文章目录 1 1 加工技术发展简史 1 2 现代加工技术的地位与分类 1 3 现代加工技术的发展趋势 加工技术历史悠久 可以说它伴随着人类的诞生而出现 伴随着人类的进步而发展 人类与猿相分离 是由于人学会了双足行走
  • 第2章 应用层-计算机网络

    目录 学习目的 相关概念理解和主流应用层协议学习 目录 应用层协议原理 一些网络应用 了解应用层大概的应用 研发网络应用程序 研发网络应用程序的核心 基于运输层提供的服务 实现可以相互通信的端系统 没有应用程序软件运行在网络核心设备上 网络
  • 大数据专业到底有多火?

    2017 2018大数据为什么这么火热 从以下方面来看 人民日报官方微信公众平台发布了一篇文章 公布已有35所高校获批 数据科学与大数据技术 专业 使大数据受到更多家长的关注 大数据也被越来越多的人重视 高校开办相关专业也不能缓解大数据人才
  • MySQL安装出现环境问题(缺少Microsoft Visual C++ 2019 Redistributable Package)

    在安装MySQL时 选择安装类型 Setup Type 后 需要检查底层环境 一般来说 电脑的环境都是满足要求的 部分电脑可能会存在环境缺失的情况 不同安装模式和版本的环境要求不同 有的一个两个 有的多个 当相关环境缺失时 环境会报错 并显
  • 8.spring系列- java注解

    问题 注解是干什么的 一个注解可以使用多次吗 如何使用 Inherited是做什么的 Target中的TYPE PARAMETER和TYPE USER用在什么地方 泛型中如何使用注解 注解定义可以实现继承吗 spring对注解有哪些增强 A
  • Unity 2022 (Windows 10) 每次打开项目都会弹出"Unity is running as administrator"

    1 Win R 输入 control 打开控制面板 2 找到 用户账户 gt 更改用户账户控制设置 3 将滑块调用中间 仅当应用尝试更改我的计算机时通知我 默认 4 重启电脑
  • python后端学习(四)进程、消息队列、进程池

    进程以及状态 1 进程 程序 例如xxx py这是程序 是一个静态的 进程 一个程序运行起来后 代码 用到的资源 称之为进程 它是操作系统分配资源的基本单元 不仅可以通过线程完成多任务 进程也是可以的 2 进程的状态 工作中 任务数往往大于
  • 【转载】KaTeX 数学公式大全

    文章目录 转载自 前言 受支持的功能 声调记号 定界符 括号之类 定界符大小 5
  • HTML——锚链接

    不同页面锚链接 a href a p a href 锚链接 html shuiguo 水果 a p p a href 锚链接 html shucai 蔬菜 a p p a href 锚链接 html yundong 运动 a p 展示效果
  • [计算机毕业设计]食品安全数据的关联分析模型的应用

    前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大
  • angular6学习(七):样式设置和调用

    样式调用是在app component ts中调用app component css设置 外置调用 也可内置调用 一 外置调用 在html文件中添加h3标签 在css文件中设置h3样式 显示如下 一 内置调用 在 ts文件中设置h3样式 显
  • 远程计算机已加入AAD凭据不工作

    解决方法 计算机需要加入AAD Azure Active Directory 设置 账户 其他用户 连接工作或学校用户 连接 在下方的 替代操作 中选择 将此设备加入 Azure Active Directory 输入用户名和密码 点击加入
  • 学习日记——STM32CubeMX软件应用(2020.1.31)

    STM32CubeMX的定义 STM32CubeMX是ST公司主动原创的一款代码生成工具 它可以减轻开发时间和费用 相当于一种偷懒的做法 STM32CubeMX集成了一个全面的软件平台 支持STM32每一个系列的MCU开发 STM32Cub
  • 【idea】IDEA常用断点详解

    一 断点条件过滤 场景 过滤条件i lt 10 1 标注断点 点击需要调试的代码行 2 鼠标悬浮在断点上 右击 在condition中输入条件 如 i 10 点击done按钮 3 确认条件是否生效 鼠标悬浮断点 显示所填写的条件 4 点击右
  • 搭建个人网站vm+center os+apache

    如何搭建个人网站 准备的前提 vm cnetos 7 apche 在vm上安装center os的教程就不介绍了这个有很多 1 如何配置一台刚装好了center os 7并且能够使他联网 ping 通百度 ip a查看当前ip地址 如果显示
  • 微信小程序:环形进度条模块

    利用canvas实现微信小程序环形进度条模块 模块下载链接 下载链接 最近开发一款背单词的微信小程序 计划使用环形进度条展示每日背单词进度 效果图如下 可渐变颜色 开发步骤 1 在根目录创建名为components的文件夹 用来放需要引用的
  • java链式编程/级联式编程

    链式编程 也叫级联式编程 调用对象的函数时返回一个this对象指向对象本身 达到链式效果 可以级联调用 链式编程 通过高阶函数以点为连接将多个函数连接在一起完成参数传递和复杂的操作 通俗的说是通过点号 链接在一起成为一句代码 链式编程的优点