从 JAVA 8 开始,便引入了一种称为“流式 API”的编程风格,当然也被称为“链式设置”或“链式调用” 。它主要是通过设置方法的返回值 , 让返回值变为对象自身,从而实现连续的方法调用,这种风格就叫做“链式设置”或“链式调用” 。
例如,以下代码:
MySQLConnectOptions connectOptions = new MySQLConnectOptions().setPort(3306).setHost("127.0.0.1").setDatabase("mydb").setUser("root").setPassword("root");
其属性的设置就称为链式调用或链式设置 。
1.链式调用优点使用链式调用主要有以下几个优点:
- 简洁性:链式设置使得代码更加简洁和易读 。通过连续的方法调用,可以在一行代码中完成多个操作,减少了代码的冗余和嵌套 。
- 可读性:链式设置可以提供更清晰、更自然的代码流 。每个方法调用都可以形成一个语义上的整体,使得代码更易于理解 。
- 可组合性:链式设置可以方便地组合多个操作 。每个方法返回的是对象自身或包含对象自身的容器,使得可以连续地进行多个操作,从而实现更复杂的功能 。
- 可扩展性:链式设置使得添加、修改或移除操作更加灵活 。由于每个方法都是在对象自身上操作 , 并返回对象自身或包含对象自身的容器,可以轻松地添加新的操作或修改现有的操作 。
2.链式调用实现链式调用的主要实现方式,总共有以下 4 种:
- Setter 原生方式
- Lombok @Accessors 注解方式
- Lombok @Builder 注解方式
- Hutool GenericBuilder 方式
2.1 Setter 原生方式Setter 原生方式的实现比较简单,只需要设置 Setter 方法 , 并且每个 Setter 方法都返回自身对象即可,如下代码所示:
【如何实现链式调用?】
public class Student {private String name;private int age;public Student name(String name) {this.name = name;return this;}public Student age(int age) {this.age = age;return this;}}
链式调用代码如下:Student stu = new Student().name("磊哥").age(18);
2.2 Lombok @Accessors 注解方式Lombok 是一个 Java 库,它通过注解来简化 Java 代码的编写 。其中,@Accessors 注解可以开启链式调用风格 。具体实现代码如下:
@Getter@Setter@Accessors(chAIn = true)public class Student {private String name;private int age;}
在上面的示例中,使用了 @Accessors(chain = true) 注解来开启链式调用风格 。这样就可以通过以下方式进行链式设置:Student stu = new Student() .setName("John") .setAge(30);
2.3 Lombok @Builder 注解方式使用 @Builder 注解,会自动生成一个 Builder 类 , 通过该 Builder 类可以链式地设置类的属性并创建对象 。这种方式在构建复杂对象时非常方便 。具体实现代码如下:
import lombok.Builder;@Builderpublic class Student {private String name;private int age;}
链式调用代码如下:Student stu = Student.builder().name("磊哥").age(18).build();
2.4 Hutool GenericBuilder 方式Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本 , 提高工作效率,使 Java 拥有函数式语言般的优雅 , 让 Java 语言也可以“甜甜的” 。其中,Hutool 提供了 GenericBuilder 类 , 可以实现链式调用,具体实现代码如下:Student stu = GenericBuilder.of(Student::new).with(Student::setName, "磊哥").with(Student::setAge, 18).build();
小结使用链式调用(也叫做链式设置)提高了代码的可读性和可组合性,使得代码更加简洁、灵活和易于维护 。而链式调用的常用实现方式有:原生 Setter 方式、Lombok 的 @Accessors 注解或 @Builder 注解实现方式,或者使用 Hutool 工具中提供的 GenericBuilder 类都可以实现链式调用 。推荐阅读
- 基于Python实现大规模光栅人口数据可视化
- 如何解决 MySQL 主从延时问题?
- 如何在学信网上申请学历认证,如何从学信网下载学历认证证书呢
- 高手教你如何用黄金成色辨别黄金
- 使用加湿器会导致加湿器肺炎吗?如何正确使用
- 不续签劳动合同,如何赔偿?
- 有韩国舒淇之称的赵茹珍,是如何穿回衣服并最终封后的
- cdr文件不要的部分要如何删除
- 如何写招聘信息,如何在前程无忧上发布招聘的信息
- 如何设置电脑为节能模式,电脑显示器怎么退出节能模式