2011-01-03 16 views

答えて

62

「安全なナビゲーション演算子」は、nullポインタ例外を簡潔に回避するGroovy機能です。 http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

この場合、phoneInstanceがヌルの場合は、nameプロパティを取得しようとせず、NPEを発生させます。フィールドタグの値をnullに設定するだけです。

+0

ありがとう:の省略形です

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

a = x?.y 

がためだけの省略形です!私はしばらくそれをグーグルしていたが、答えを見つけることはできませんでした。 –

+0

url 404s now – juan

+11

余分な涼しさのために、Elvis演算子で賢明なデフォルトを追加することもできます: '$ {phoneInstance?.number?: '+ 44'}'キングベイビーとロックグルーヴィー! – barrymac

4

オペレータ?は、Groovy(したがってGSP)でnull値を許可します。例えば、通常はGSPで、priceDetailsがnullである

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

場合、これはNullPointerExceptionをスローします。

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

私たちが代わりに?演算子を使用している場合

は...今${priceDetails?.amount}の値が代わりにnullポインタ例外をスローする、nullです。

1

これはGroovyで非常に重要な機能です。オブジェクトがnullの場合(つまり、 「phoneInstance」がnullの場合)、「null」値が返されます。この機能 は「セーフナビゲーションオペレータ」と呼ばれます。単にこの機能を使用する場合、オブジェクト( "phoneInstance")をチェックする必要はありません。

0

安全ナビゲーション演算子(?)は、左側のオブジェクトがnullの場合はnullを返し、そうでない場合は、そのオブジェクトの正しいメンバーの値を返します。そうphoneInstance?.nameはちょうど例えばphoneInstance == null ? null : phoneInstance.name

ためshorthandnです:

if(x == null){ 
    a = null 
} else { 
    a = x.y 
} 
関連する問題