问号附加到域属性时有啥作用

Posted

技术标签:

【中文标题】问号附加到域属性时有啥作用【英文标题】:What does question mark do when appended to domain property问号附加到域属性时有什么作用 【发布时间】:2013-01-05 18:29:41 【问题描述】:

我有以下:

if (params.query?.equals(g.message(code: "layouts.main.search"))) 
  params.query = ""

'?' 是什么意思?部分吗?

【问题讨论】:

jlorenzen.blogspot.com.br/2007/10/… 我很想知道投反对票的原因和是谁? 我投了反对票。一个简单的谷歌搜索回答了这个问题,在 *** 中也有 duplicates 。 我认为塞尔吉奥有点苛刻。谷歌我的确切问题标题,看到所有***结果都没有返回,同样对于 SO 上的建议问题/答案。那么问题就变成了——也许我可以想到更合适的词来进行谷歌搜索。对于刚接触 grails 的人来说,在执行搜索时想出合适的术语并不总是那么容易。对答案的 3 次投票表明人们正在登陆这里并发现它是一个合适的问题/答案。 如果我用“grails 问号域属性”搜索,google 的第一个结果就是我上面指出的重复项。答案中的 3 个赞成票意味着答案就是您要寻找的答案,但在我看来,这并不意味着这是一个好问题。但这只是我的意见。 【参考方案1】:

它是一个安全导航操作符,它返回空值而不是抛出 NullPointerExceptions。

检查 Groovy 中可用的运算符

http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

【讨论】:

【参考方案2】:

来自 groovy.org

安全导航操作员 (?.) 安全导航运算符用于避免 NullPointerException。通常,当您有一个对象的引用时,您可能需要在访问该对象的方法或属性之前验证它不为空。为避免这种情况,安全导航运算符将简单地返回 null 而不是抛出异常,如下所示:

def user = User.find( "admin" )           //this might be null if 'admin' does not exist
def streetName = user?.address?.street    //streetName will be null if user or user.address is null - no NPE thrown

【讨论】:

【参考方案3】:

这里是 ?运营商:

http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator

在你的情况下?运算符保护空对象上的方法调用“等于”,例如在参数列表中找不到查询参数。

【讨论】:

以上是关于问号附加到域属性时有啥作用的主要内容,如果未能解决你的问题,请参考以下文章

C#中的双问号有啥作用? [复制]

一元问号 (?) 运算符有啥作用?

Spring Boot Maven 插件 - “附加”设置有啥作用?

Ruby 中的独立问号有啥作用? [复制]

在 if 语句中使用 return 时有啥作用?

“异步延迟”一起使用时有啥作用? [复制]