if(var)fn(var)的groovy方式

ati*_*n25 2 grails groovy

我想知道下面是否有任何更常用的代码方式:

def dataList = OperLog.createCriteria().list(max:params.max, offset:params.offset) {
    if(params.relationId){
      eq('relationId',params.long('relationId'))
    }
    order(params.sort, params.order)
}
Run Code Online (Sandbox Code Playgroud)

比如someVar?.someMethod有什么糖不要调用一个方法,它的params是null

tim*_*tes 5

你可以这样做:

params.relationId?.with { rid ->
  println rid
}
Run Code Online (Sandbox Code Playgroud)

with如果params.relationIdnull...... 那么块内的代码将不会执行...

但是,我认为你的原始代码在其意图中更为明显,并且你不必在以后审查它时尝试弄清楚它正在做什么;-)