以下是實現鏈式條件檢查的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
}
關鍵特性:
- ?鏈式中斷機制? - 當任何
check
失敗時,后續鏈式調用自動跳過 - ?延遲計算? - 使用
Supplier<Boolean>
避免不必要的條件計算 - ?多終止操作?:
then()
:返回結果或nullthenOptional()
:返回安全容器orElse()
:提供默認值orElseThrow()
:中斷時拋出異常
- ?類型安全? - 通過泛型支持任意返回類型
- ?空值安全? - Optional包裝避免NPE
此實現通過函數式接口保持代碼簡潔,同時提供靈活的中斷處理和多種返回策略,符合現代Java編程風格。