我在生成的GSP页面中看到了这一点。 ?是什么意思?
<g:textField name="name" value="${phoneInstance?.name}" />
答案 0 :(得分:62)
它是&#34;安全导航操作符&#34;,这是一个Groovy功能,可以简洁地避免空指针异常。见http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator
在这种情况下,如果phoneInstance
为null,那么它不会尝试获取name
属性并导致NPE - 它只是将字段标记的值设置为null。
答案 1 :(得分:4)
?
运算符允许Groovy中的空值(因此,GSP)。例如,通常在gsp中,
<g:field name="amount" value="${priceDetails.amount}" />
如果priceDetails
为空,则会抛出NullPointerException
。
如果我们使用?
运算符......
<g:field name="amount" value="${priceDetails?.amount}" />
现在${priceDetails?.amount}
的值为null,而不是抛出空指针异常。
答案 2 :(得分:1)
这是Groovy中非常重要的功能。如果对象为null(即, “phoneInstance”为null)然后它提供“null”值。此功能 被称为“安全导航操作员”。简单地说,当我们使用此功能时,无需检查对象(“phoneInstance”)是否为空。
答案 3 :(得分:1)
如果左侧的对象为null,则安全导航操作符(?。)返回null,否则返回该对象的右侧成员的值。所以phoneInstance?.name
只是phoneInstance == null ? null : phoneInstance.name
例如:
a = x?.y
只是简写:
a = (x == null ? null : x.y)
这是:
的简写if(x == null){
a = null
} else {
a = x.y
}