三元条件中使用的引用变量? (例如:var?this:null)

时间:2015-07-07 19:08:07

标签: groovy conditional ternary

有没有办法在groovy中引用objList.addListener(e->{ if(e.wasAdded) { if(myObjectList.size>=e.getFrom()) myObjList.Add(new myObject(objList.get(objList.size-1))); else{ myObjList.Add(e.getFrom(),new myObject(objList.get(e.getFrom())); } } if(e.wasRemoved) { myObjectList.Remove(e.getFrom()); } if(e.wasPermutated) { //handle this as well } }); 语句的第一部分?

例如,有没有办法缩短

?:

类似

def time = map.get('time') ? map.get('time').get('milliseconds') : null

,其中"它"引用命令的第一部分?

4 个答案:

答案 0 :(得分:1)

听起来你只想使用safe navigation operator

def time = map.get('time')?.get('milliseconds')

如果map.get('time')返回空引用,则整个表达式的结果将为null,并且get('milliseconds')不会被调用。

答案 1 :(得分:1)

您可以使用安全导航操作员 http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

所以你可以这样做:

def time = map?.get('time')?.get('milliseconds')

答案 2 :(得分:1)

您可以使用safe navigation operator

def time = map.get('time')?.get('milliseconds')

如果.get('milliseconds')的结果为map.get('time'),则可确保不会调用null。在这种情况下,表达式的总体结果也是null

答案 3 :(得分:0)

这很简单:

map.time?.milliseconds