链式调用--便于理解

params?.itemCategorysCode == param && params.itemCategorysCode  

query?.pushstatus? .length>0 == query && query.pushstatus  &&query.pushstatus.length>0

案例:

// 可选链操作符(ES2020+)
const aa = '';
const result = aa?.trim()?.split(',') ?? [];

console.log(result); // 输出: []
  • ?. 可选链操作符:
    当 aa为 null 或 undefined 时,直接回 undefined.
    aa.trim() 为 null 或 undefined 时,直接返回 undefined
  • ?? 空值合并操作符:当左侧为 null 或 undefined 时,返回右侧默认值 []

参考链接:

https://zhuanlan.zhihu.com/p/715157154 

https://www.zhihu.com/question/536438820/answer/2521385508 

### Java 链式调用的实现原理与使用示例 链式调用(Method Chaining)是一种常见的编程模式,其核心原理是让每个方法返回调用对象本身(通常是 `this`),从而实现连续调用多个方法。这种方式在 Java 中广泛使用,尤其在构建器模式(Builder Pattern)和一些流行的框架中,例如 RxJava 和 Android 的 `AlertDialog`。 #### 实现原理 链式调用的实现依赖于方法返回当前对象或构建器实例。每个方法完成特定操作后返回 `this`,使得后续方法可以继续调用。这种设计模式通常用于简化对象的创建和配置过程,提高代码的可读性和可维护性。 在构建器模式中,一个内部类 `Builder` 被用来逐步设置对象的属性,最终通过 `build()` 方法生成目标对象。每个设置方法返回 `Builder` 实例,从而实现链式调用 [^3]。 #### 使用示例 以下是一个典型的链式调用示例,展示如何通过构建器模式创建一个 `Computer` 对象: ```java public class Computer { private String cpu; private String gpu; private String memoryType; private int memorySize; private String storageType; private int storageSize; private String screenType; private int screenSize; private String osType; private Computer(Builder builder) { this.cpu = builder.cpu; this.gpu = builder.gpu; this.memoryType = builder.memoryType; this.memorySize = builder.memorySize; this.storageType = builder.storageType; this.storageSize = builder.storageSize; this.screenType = builder.screenType; this.screenSize = builder.screenSize; this.osType = builder.osType; } public static class Builder { private String cpu; private String gpu; private String memoryType; private int memorySize; private String storageType; private int storageSize; private String screenType; private int screenSize; private String osType; public Builder setCPU(String cpu) { this.cpu = cpu; return this; } public Builder setGPU(String gpu) { this.gpu = gpu; return this; } public Builder setMemoryType(String memoryType) { this.memoryType = memoryType; return this; } public Builder setMemorySize(int memorySize) { this.memorySize = memorySize; return this; } public Builder setStorageType(String storageType) { this.storageType = storageType; return this; } public Builder setStorageSize(int storageSize) { this.storageSize = storageSize; return this; } public Builder setScreenType(String screenType) { this.screenType = screenType; return this; } public Builder setScreenSize(int screenSize) { this.screenSize = screenSize; return this; } public Builder setOSType(String osType) { this.osType = osType; return this; } public Computer build() { return new Computer(this); } } } ``` 使用方式如下: ```java Computer computer = new Computer.Builder() .setCPU("inter-skylake-i7") .setGPU("GTX-Titan") .setMemoryType("ddr4-2133MHz") .setMemorySize(16) .setStorageType("ssd") .setStorageSize(512) .setScreenType("IPS") .setScreenSize(28) .setOSType("Ubuntu/Window10") .build(); ``` #### 优点 1. **代码简洁**:链式调用可以减少代码行数,使代码更加紧凑。 2. **可读性强**:通过链式调用,可以更直观地看到对象的配置流程。 3. **易于维护**:每个方法只负责一个任务,便于调试和维护。 #### 注意事项 1. **不可变性**:链式调用通常用于构建不可变对象,确保对象创建后状态不会改变。 2. **线程安全**:在多线程环境下,需要确保构建器的线程安全性。 3. **过度使用**:虽然链式调用提高了可读性,但过度使用可能导致代码难以调试和理解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值