有什么方法可以对不存在的对象使用安全的null运算符?

时间:2018-08-30 16:43:49

标签: groovy

是否有类似“?”的内容?如果对象不存在,则可以返回null或false。

这会引发错误:

println doesntExist['sdfsd'​]​

这不起作用,但是有没有办法使用“?”以某种方式获取布尔值?

println doesntExist?['sdfsd'​]​
println doesntExist['sdfsd'​]​?
println ?doesntExist['sdfsd'​]​

是否有更时髦的方法可以做到这一点?

if (doesntExist && doesntExist['sdfsd'​]​ ){}

1 个答案:

答案 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')

直接。