一文详解java如何实现链式调用

 更新时间:2023年12月14日 14:00:37   作者:Java中文社群  
从 Java 8 开始,便引入了一种称为“流式 API”的编程风格,当然也被称为“链式设置”或“链式调用”,本文主要来和大家讨论一下如何实现链式调用,感兴趣的可以了解下

从 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;

@Builder
public 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 类都可以实现链式调用。

到此这篇关于一文详解java如何实现链式调用的文章就介绍到这了,更多相关java链式调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot中进行 文件上传和 文件下载功能实现

    Spring Boot中进行 文件上传和 文件下载功能实现

    开发Wb应用时,文件上传是很常见的一个需求,浏览器 通过 表单形式 将 文件 以 流的形式传递 给 服务器,服务器再对上传的数据解析处理,下面将通过一个案例讲解使用 SpringBoot 实现 文件上传,感兴趣的朋友一起看看吧
    2024-07-07
  • jdbc实现用户注册功能代码示例

    jdbc实现用户注册功能代码示例

    这篇文章主要介绍了jdbc实现用户注册功能,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java用邻接表存储图的示例代码

    Java用邻接表存储图的示例代码

    邻接表是图的一种链式存储方法,其数据结构包括两部分:节点和邻接点。本文将用邻接表实现存储图,感兴趣的小伙伴可以了解一下
    2022-06-06
  • Shiro安全框架的主要组件及认证过程简介

    Shiro安全框架的主要组件及认证过程简介

    这篇文章主要介绍了Shiro安全框架的主要组件及认证过程简介,Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理,本文就来介绍一下此框架的核心组成,需要的朋友可以参考下
    2023-08-08
  • SparkStreaming整合Kafka过程详解

    SparkStreaming整合Kafka过程详解

    这篇文章主要介绍了SparkStreaming整合Kafka过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Java编程中二维数组的初始化和基本操作实例

    Java编程中二维数组的初始化和基本操作实例

    这篇文章主要介绍了Java编程中二维数组的初始化和基本操作实例,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • SpringBoot打成war包在tomcat或wildfly下运行的方法

    SpringBoot打成war包在tomcat或wildfly下运行的方法

    这篇文章主要介绍了SpringBoot打成war包在tomcat或wildfly下运行的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 30条Java代码编写经验分享

    30条Java代码编写经验分享

    你知道写好Java代码的30条经验是什么吗?这篇文章主要为大家分享了30条Java代码编写经验技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Java线程池 ThreadPoolExecutor 详解

    Java线程池 ThreadPoolExecutor 详解

    这篇文章主要介绍了Java线程池 ThreadPoolExecutor,线程池包括线程集合、阻塞队列、拒绝策略处理器,更多相关内容需要的朋友可以参考一下
    2022-07-07
  • Java 3年面试经验告诉你Mybatis是如何进行分页的

    Java 3年面试经验告诉你Mybatis是如何进行分页的

    这篇文章主要介绍了Java 3年面试经验告诉你Mybatis是如何进行分页的,对于任何ORM框架,分页的实现逻辑无外乎两种,不管怎么包装,最终给到开发者的,只是使用上的差异而已,本文给大家讲解的很明白,感兴趣的朋友一起看看吧
    2022-09-09

最新评论