Groovy閉包中return的坑
阿新 • • 發佈:2019-02-20
一直沉浸在Groovy的強大和方便中,稍微不注意就被坑了一把。
在each方法中return相當於Java迴圈中的continue,只會終止當前閉包中的程式碼,繼續下一次迴圈。並不會跳出迴圈外的方法。
實際應用中程式碼的邏輯往往比前面的兩段示例更復雜,如果測試不夠全面,結果會很慘。
Java的保守也有好處,簡單易懂,不容易出錯。Groovy的閉包雖然方便,也容易埋下隱患。
boolean hasValueGreaterThan(list,min){ list.each{ if(it>min){ //這個return因為在閉包中,相當於for迴圈中的continue,終止當前迴圈中的程式碼,進行下一次迴圈,並不會返回hasValueGreaterThan方法的結果 return true; } } }
boolean hasValueGreaterThan(list,min){
for(int i=0;i<list.size();i++){
if(list.get(i)>min){
//要用for迴圈,才能正常返回
return true;
}
}
}