JAVA-链式编程

1. 链式编程

链式编程是将多个操作通过点号"."链接在一起成为一个整体,从而更加的简洁方便。链式编程的原理就是每个操作完成后都会返回一个this对象,也就是返回对象本身。链式编程是JAVA8的新特性。
使用准则:只要方法返回的是对象本身,那么就可以使用链式编程。

2.链式编程的使用

2.1StringBuffer中的append()方法

在使用StringBuffer中的append()方法进行字符串拼接时,就经常用到链式编程。

public class main {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("a").append("b").append("c");
        System.out.println(stringBuffer);
    }
}

结果如下:
在这里插入图片描述
如下append的实现方法返回的是this。

public synchronized StringBuffer append(Object obj) {
        this.toStringCache = null;
        super.append(String.valueOf(obj));
        return this;
    }

    @IntrinsicCandidate
    public synchronized StringBuffer append(String str) {
        this.toStringCache = null;
        super.append(str);
        return this;
    }

2.2 String 中的valueOf,concat,replace,substring

使用 String 进行字符串操作时,也经常用到链式编程。

  • valueOf() 相当于new String
  • concat() 在末尾添加xxx
  • replace() 将某个元素替代为xxx
  • substring() 取子串
public static void main(String[] args) {
        String str = String.valueOf("123").concat("456").replace('4','7').substring(1,6);
        System.out.println(str);
    }

在这里插入图片描述

2.3 Stream 流式计算

import java.util.Arrays;
import java.util.List;

public class main {
    public static void main(String[] args) {
        // 将数组变成一个列表集合
        List<Integer> list = Arrays.asList(1,3,4,2,5,2);
        // 获取集合的 Stream 流对象
        list.stream()
                // 相同元素去重
                .distinct()
                // 升序排序
                .sorted((c1, c2) -> c1.compareTo(c2))
                // 遍历
                .forEach(System.out::println);

    }
}

在这里插入图片描述

2.4 lombok新建对象

这个可以具体看此贴 JAVA 链式编程和建造者模式的使用(lombok的使用)

### Java 中 Lombok 注解实现链式调用编程 #### 使用 `@Data` 和 `@Accessors` 为了使类支持链式调用,可以使用 `@Data` 和 `@Accessors(chain = true)` 这两个注解。`@Data` 自动生成 getter/setter 方法以及其他常用方法如 equals()、hashCode() 和 toString()[^1]。 ```java @Data @Accessors(chain = true) public class Student { private String name; private int age; } ``` 通过设置 `chain=true` 参数,所有的 setter 方法都会返回当前对象实例 (`this`) 而不是默认的 `void` 类型,从而允许进行链式调用。 #### 结合 `@RequiredArgsConstructor` 当希望创建不可变的对象时,可以通过组合 `@RequiredArgsConstructor(staticName = "builder")` 来提供静态 builder 方法。这使得可以在不违反封装原则的情况下轻松地初始化必填字段并启用链式语法[^4]。 ```java @RequiredArgsConstructor(staticName = "builder") public class Person { @NonNull private final String firstName; @NonNull private final String lastName; // Other properties... } ``` 此时,可以直接利用生成器模式来进行流畅式的参数赋值: ```java Person person = Person.builder() .firstName("John") .lastName("Doe") .build(); System.out.println(person); ``` #### 处理集合类型的属性 —— `@Singular` 对于包含集合类型成员变量的情况,Lombok 提供了专门针对 Builder 的优化工具——`@Singular` 注解。该注解可以让开发者更加方便地操作列表或集合作为构建的一部分而无需手动管理复杂的内部状态变化[^5]。 ```java @Builder public class Library { @Singular List<Book> books; } // Usage example: Library library = Library.builder() .book(new Book("Title A")) .books(Arrays.asList( new Book("Title B"), new Book("Title C"))) .build(); ``` 以上就是关于如何借助 Lombok 库简化 Java Bean 设计以及实现优雅链式 API 接口设计的一些介绍[^1][^2][^3][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有趣的野鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值