当前位置: 首页 > news >正文

java实现一个方法,isTure则程序继续往下,为false则return的链式写法

以下是实现链式条件检查的Java方法,采用函数式风格设计。代码包含一个Chainable类,支持连续的check方法和多个终止操作(如then, orElse等),满足在条件为false时中断链式调用并返回默认值的需求:

import java.util.Optional;
import java.util.function.Supplier;public class Chainable {private boolean shouldProceed = true;private Chainable() {}// 起始方法public static Chainable start() {return new Chainable();}// 核心检查方法:满足条件则继续,不满足则中断后续链式调用public Chainable check(Supplier<Boolean> conditionSupplier) {if (shouldProceed) {this.shouldProceed = conditionSupplier.get();}return this;}// 简化版检查(直接使用布尔值)public Chainable check(boolean condition) {return check(() -> condition);}// 执行操作并返回结果(中断时返回null)public <R> R then(Supplier<R> supplier) {return shouldProceed ? supplier.get() : null;}// 执行无返回值操作public void then(Runnable runnable) {if (shouldProceed) runnable.run();}// 执行操作并返回Optional(中断时返回空Optional)public <R> Optional<R> thenOptional(Supplier<R> supplier) {return shouldProceed ? Optional.ofNullable(supplier.get()) : Optional.empty();}// 中断时返回指定默认值public <R> R orElse(Supplier<R> supplier, R defaultValue) {return shouldProceed ? supplier.get() : defaultValue;}// 中断时执行备选操作public <R> R orElseGet(Supplier<R> mainSupplier, Supplier<R> backupSupplier) {return shouldProceed ? mainSupplier.get() : backupSupplier.get();}// 中断时抛出指定异常public <R> R orElseThrow(Supplier<R> supplier, Supplier<? extends RuntimeException> exceptionSupplier) {if (!shouldProceed) throw exceptionSupplier.get();return supplier.get();}
}

使用示例

public static void main(String[] args) {// 示例1:条件全部满足时返回计算结果Integer result1 = Chainable.start().check(() -> 10 > 5).check(() -> 20 > 15).then(() -> 10 + 20);System.out.println("Result 1: " + result1); // 输出 30// 示例2:条件不满足时返回默认值String result2 = Chainable.start().check(false) // 直接中断.check(() -> { System.out.println("此代码不会执行");return true;}).orElse(() -> "成功", "失败");System.out.println("Result 2: " + result2); // 输出 "失败"// 示例3:中断时抛出异常try {Chainable.start().check(3 > 5).orElseThrow(() -> "计算结果",() -> new IllegalStateException("条件检查失败"));} catch (Exception e) {System.out.println("Caught: " + e.getMessage()); // 输出异常信息}// 示例4:无返回值的操作Chainable.start().check(() -> true).then(() -> System.out.println("操作被执行")); // 正常输出// 示例5:使用Optional避免nullOptional<String> optional = Chainable.start().check(false).thenOptional(() -> "不会执行");System.out.println("Optional: " + optional.isPresent()); // 输出 false
}

关键特性:

  1. 链式中断机制​ - 当任何check失败时,后续链式调用自动跳过
  2. 延迟计算​ - 使用Supplier<Boolean>避免不必要的条件计算
  3. 多终止操作​:
    • then():返回结果或null
    • thenOptional():返回安全容器
    • orElse():提供默认值
    • orElseThrow():中断时抛出异常
  4. 类型安全​ - 通过泛型支持任意返回类型
  5. 空值安全​ - Optional包装避免NPE

此实现通过函数式接口保持代码简洁,同时提供灵活的中断处理和多种返回策略,符合现代Java编程风格。

http://www.dtcms.com/a/299459.html

相关文章:

  • 零基础学习性能测试第三章:jmeter线程组组合
  • LeetCode|Day26|191. 位 1 的个数|Python刷题笔记
  • Java学习|黑马笔记|Day23】网络编程、反射、动态代理
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月26日第150弹
  • 在Power Automate Desktop中执行PowerShell获取SharePoint online某个文件夹的用户权限列表
  • SAP ABAP的数据通过调用泛微Restful API同步数据到OA建模表
  • 学习日志19 python
  • pytest中的rerunfailures的插件(失败重试)
  • 在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
  • 【Kubernetes】使用StatefulSet进行的资源调度,扩缩容,更改配置到版本回滚,三种配置更新方式
  • c#中让图片显示清晰
  • 三、平衡桥电路
  • 060_泛型擦除与边界限定
  • MySQL数据库SQL语句进阶篇——连接查询与子查询详解
  • Traffic Lights set的使用
  • CSS变量与Houdini自定义属性:解锁样式编程新维度
  • Go 语言函数设计原则:避免修改传入参数
  • MCU中的GPIO(通用输入/输出)是什么?
  • [Qt]QString隐式拷贝
  • 利用DeepSeek解决kdb+x进行tpch测试的几个问题及使用感受
  • 系统架构设计师-【2025年上半年案例题】-真题分享
  • unittest 案例执行顺序详解
  • [SAP ABAP] ALV报表练习4
  • FreeRTOS-事件组
  • Cortex-M3内核SysTick定时器介绍
  • `munmap`系统调用及示例
  • 柔性智造:华控智能的垂直整合定制方案
  • 微服务springcloud http客户端feign
  • 伟淼科技李志伟:破解二代接班传承困局,系统性方案破除三代魔咒
  • Redis缓存策略以及bigkey的学习(九)