我有两个相似的方法,但它们的检查条件不同。给予两个相似的方法,我怎样才能把这两个方法结合成一个呢?这对闭包来说是可能的吗?
def someCondition = false
def method1() {
while(!someCondition) {
def connectionStatus = getConnectionStatus() // return 200, 404, etc.
if (connectionStatus == 200) {
someCondition = true
} else {
println "repeat until connection is 200"
sleep 15
}
}
}
和
def someCondition = false
def method2(){
while(!someCondition) {
def result = getResult() // A, B, C, etc.
if (result in ["A", "B", "C"]) {
someCondition = true
} else {
println "waiting until result is either A, B, or C"
sleep 15
result = getResult() // call again to check if result changed
}
}
}
我可以试着把它变成一个方法,并有不同的情况,它根据不同的情况在不同的if条件下等待,但这和只使用两个不同的方法没有什么不同。在Groovy中有什么优雅的方法来解决这个问题吗?
1条答案
按热度按时间ghg1uchk1#
您可以编写一个如下所示的方法,该方法接受一个Closure,如果成功则返回
true
:那么,你可以这样称呼它:
或使用以下选项延长休眠时间:
或者让它在重试之间休眠更长时间,并且只重试5次:
你是这个意思吗?
编辑
正如所指出的,这在每次调用闭包时都会创建一个列表,因此对于长时间运行的快速循环任务,这可能(可能)会创建许多死对象供垃圾收集器拾取。
解决这个问题的一种方法是将预期值传递给main方法,并将其作为参数传递给闭包。
然后,我们只创建一个列表: