What does the question mark mean in GSP/Grails?

怎甘沉沦 提交于 2019-12-20 09:05:09

问题


I saw this in my generated GSP pages. What does the ? mean?

<g:textField name="name" value="${phoneInstance?.name}" />

回答1:


It's the "Safe Navigation Operator", which is a Groovy feature that concisely avoids null pointer exceptions. See http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

In this case, if phoneInstance is null, then it doesn't try to get the name property and cause a NPE - it just sets the value of the field tag to null.




回答2:


The ? operator allows null values in Groovy (and thusly, GSP). For example, normally in gsp,

<g:field name="amount" value="${priceDetails.amount}" />

If priceDetails is null, this will throw a NullPointerException.

If we use the ? operator instead ...

<g:field name="amount" value="${priceDetails?.amount}" /> 

now the value of ${priceDetails?.amount} is null, instead of throwing a null pointer exception.




回答3:


This is very important feature in Groovy. If the object is null (ie, "phoneInstance" is null) then it's provide "null" value. This feature is called "Safe Navigation Operator". Simply when we use this feature , No need of checking the object("phoneInstance") is null or not.




回答4:


the safe navigation operator (?.) returns null if the object on the left is null, otherwise it returns the value of the right member of that object. so phoneInstance?.name is just shorthandn for phoneInstance == null ? null : phoneInstance.name

for example:

a = x?.y

is just shorthand for:

a = (x == null ? null : x.y)

which is shorthand for:

if(x == null){
    a = null
} else {
    a = x.y
}


来源:https://stackoverflow.com/questions/4581532/what-does-the-question-mark-mean-in-gsp-grails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!