2011-01-03 25 views

Respuesta

62

Es la "seguridad de navegación del operador", que es una característica maravillosa que evita de forma concisa excepciones de puntero nulo. Ver http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

En este caso, si phoneInstance es nulo, entonces no tratar de obtener la propiedad name y causar una NPE - sólo se establece el valor de la etiqueta del campo en null.

+0

Gracias! Había estado buscando en Google por un tiempo, pero no encontré una respuesta. –

+0

La url 404s ahora – juan

+11

Para mayor frescura también puede agregar un valor predeterminado razonable con el operador de Elvis, por ejemplo: '$ {phoneInstance? .number?: '+ 44'}' Rock groovy con el rey bebé! – barrymac

4

El operador ? permite valores nulos en Groovy (y por lo tanto, GSP). Por ejemplo, normalmente en gsp,

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

Si priceDetails es nulo, esto va a lanzar una NullPointerException.

Si utilizamos el operador ? lugar ...

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

ahora el valor de ${priceDetails?.amount} es nula, en lugar de lanzar una excepción de puntero nulo.

1

Esta es una característica muy importante en Groovy. Si el objeto es nulo (es decir, "phoneInstance" es nulo), entonces proporciona un valor "nulo". Esta función se denomina "Operador de navegación segura". Simplemente cuando utilizamos esta función, no es necesario verificar el objeto ("phoneInstance") es nulo o no.

0

el operador de navegación segura (?.) Devuelve nulo si el objeto de la izquierda es nulo, de lo contrario, devuelve el valor del miembro derecho de ese objeto. por lo que se acaba de phoneInstance?.name shorthandn para phoneInstance == null ? null : phoneInstance.name

por ejemplo:

a = x?.y 

es sólo la abreviatura de:

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

que es la abreviatura de:

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