2011-01-03 14 views

risposta

62

E 'la "Navigazione operatore sicuro", che è una caratteristica Groovy che evita in modo conciso eccezioni puntatore nullo. Vedere http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

In questo caso, se phoneInstance è null, allora non cercare di ottenere la proprietà name e causare un NPE - semplicemente imposta il valore del tag campo a null.

+0

Grazie! L'ho cercato su Google per un po ', ma non ho trovato una risposta. –

+0

L'url 404s ora – juan

+11

Per maggiore freddezza puoi anche aggiungere un'impostazione predefinita con l'operatore Elvis, ad es .: '$ {phoneInstance? .number?: '+ 44'} 'Rock groovy con il re baby! – barrymac

4

L'operatore ? consente valori nulli in Groovy (e, quindi, GSP). Ad esempio, normalmente in gsp,

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

Se priceDetails è nullo, questo sarà gettare un NullPointerException.

Se si usa l'operatore ? invece ...

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

ora il valore di ${priceDetails?.amount} è nullo, invece di lanciare un'eccezione di puntatore nullo.

1

Questa funzione è molto importante in Groovy. Se l'oggetto è nullo (ovvero, "phoneInstance" è nullo), allora fornisce il valore "null". Questa funzione è denominata "Operatore di navigazione sicura". Semplicemente quando usiamo questa funzione, non c'è bisogno di controllare l'oggetto ("phoneInstance") è nullo o no.

0

l'operatore di navigazione sicura (?.) Restituisce null se l'oggetto a sinistra è nullo, altrimenti restituisce il valore del membro di destra di tale oggetto. così phoneInstance?.name è solo shorthandn per phoneInstance == null ? null : phoneInstance.name

ad esempio:

a = x?.y 

è solo una scorciatoia per:

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

, che è una scorciatoia per:

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