You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中将两个相似方法合并为一个?能否用闭包实现?

用Groovy闭包优雅合并相似重试方法

当然可以用闭包实现优雅合并,核心思路是把两个方法中**可变的部分(获取值的逻辑、成功判断条件、提示文本)**抽成参数传入通用方法,固定的循环重试逻辑则复用。

重构后的通用方法

def waitUntil(def valueProvider, Closure<Boolean> conditionChecker, String waitMessage) {
    def satisfied = false
    while (!satisfied) {
        def currentValue = valueProvider.call()
        if (conditionChecker.call(currentValue)) {
            satisfied = true
        } else {
            println waitMessage
            sleep 15
        }
    }
}

替代原method1的调用

// 对应原来的method1
waitUntil({ getConnectionStatus() }, { status -> status == 200 }, "repeat until connection is 200")

替代原method2的调用

注意:原method2里在sleep后重复调用getResult()是多余的,下一次循环会重新执行获取逻辑,重构后自动避免了这个冗余操作:

// 对应原来的method2
waitUntil({ getResult() }, { result -> result in ["A", "B", "C"] }, "waiting until result is either A, B, or C")

逻辑说明

  • valueProvider:闭包,负责获取需要检查的目标值(比如调用getConnectionStatus()或getResult())
  • conditionChecker:闭包,接收目标值,返回布尔值表示是否满足结束循环的条件
  • waitMessage:字符串,循环等待时的提示文本

这种方式完全解耦了固定的重试逻辑和可变的业务判断,后续新增类似的重试场景,只需要传入不同的闭包和提示文本即可,不需要重复编写循环、等待的代码。

内容的提问来源于stack exchange,提问作者Chris Ragner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:20:20