附加到域属性时问号的作用是什么

时间:2013-01-22 13:46:20

标签: grails

我有以下内容:

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

'?'是什么?部分吗?

3 个答案:

答案 0 :(得分:3)

这是一个safeNavigation运算符,它返回null而不是抛出NullPointerExceptions。

检查Groovy中可用的运算符

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

答案 1 :(得分:0)

来自groovy.org的

安全导航操作员(?。) 安全导航操作符用于避免NullPointerException。通常,在引用对象时,可能需要在访问对象的方法或属性之前验证它是否为null。为了避免这种情况,安全导航操作符将只返回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

答案 2 :(得分:0)

这里的解释是什么?操作者:

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

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

相关问题