-2

我有以下内容:

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

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

4

3 回答 3

3

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

检查 Groovy 中可用的运算符

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

于 2013-01-22T13:51:03.117 回答
0

来自 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
于 2013-01-22T13:51:03.967 回答
0

这里解释一下?操作员:

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

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

于 2013-01-22T13:51:35.553 回答