groovy - 是否有某种方法可以对不存在的对象使用安全空运算符?

标签 groovy

有没有类似“?”的东西?如果对象不存在,则可以返回 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/

相关文章:

groovy - 什么是 << 运算符?

performance - Grails 1.0 到 1.3 - 速度增加?

java - 如何让 Gradle 在 Java 测试之前编译 Groovy 测试

java - 如何使用java或groovy计算目录上的md5校验和?

java - 缓存键生成

jenkins - 为什么 jenkinsfile 会以这种方式使用闭包?

java - 使用 Java/Groovy 替换字符串中的反斜杠

gradle - 如何从Gradle中的子目录复制?

groovy - 如何下载文件? - 常规

groovy - Groovy 的安全导航运算符是否会出现这种与 NPE 相关的行为?