问号附加到域属性时有啥作用
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
在你的情况下?运算符保护空对象上的方法调用“等于”,例如在参数列表中找不到查询参数。
【讨论】:
以上是关于问号附加到域属性时有啥作用的主要内容,如果未能解决你的问题,请参考以下文章