有没有类似“?”的东西?如果对象不存在,则可以返回 null 或 false。
这会引发错误:
println doesntExist['sdfsd']
这不起作用,但有没有办法使用“?”以某种方式获得 bool 值?
println doesntExist?['sdfsd']
println doesntExist['sdfsd']?
println ?doesntExist['sdfsd']
有没有更好的方法来做到这一点:
if (doesntExist && doesntExist['sdfsd'] ){}
最佳答案
您可以使用 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')
直接。
关于groovy - 是否有某种方法可以对不存在的对象使用安全空运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101955/