是否有类似“?”的内容?如果对象不存在,则可以返回null或false。
这会引发错误:
println doesntExist['sdfsd']
这不起作用,但是有没有办法使用“?”以某种方式获取布尔值?
println doesntExist?['sdfsd']
println doesntExist['sdfsd']?
println ?doesntExist['sdfsd']
是否有更时髦的方法可以做到这一点?
if (doesntExist && doesntExist['sdfsd'] ){}
答案 0 :(得分:2)
您可以使用get()
或getAt()
方法,该方法等效于数组索引访问运算符:
def doesntExist = null
println doesntExist?.getAt('sdfsd')
println doesntExist?.get('sdfsd')
输出:
null
null
如果您编译包含以下内容的代码:
doesntExist['sdfsd']
并打开其反编译版本(例如在IntelliJ IDEA中),您将看到此部分编译为
DefaultGroovyMethods.getAt(doesntExist, "sdfsd")
这就是为什么如果要使用null安全运算符,则必须调用
doesntExist?.getAt('sdfsd')
直接。