2011-01-03 6 views

답변

62

"안전한 탐색 연산자"는 null 포인터 예외를 간접적으로 피하는 Groovy 기능입니다. http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

이 경우 phoneInstance이 null 인 경우 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)에서 널값을 허용합니다. 예를 들어, 일반적으로 GSP에서, priceDetails가 null

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

경우, 이것은 NullPointerException 발생합니다.

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

우리가 대신 ? 연산자를 사용하는 경우

... 편지 ${priceDetails?.amount}의 값 대신 널 포인터 예외를 던지는 null입니다.

1

이것은 Groovy에서 매우 중요한 기능입니다. 객체가 null 인 경우 (즉, "phoneInstance"가 null 인 경우) "null"값을 제공합니다. 이 기능은 을 "안전한 내비게이션 운영자"라고합니다. 간단히이 기능을 사용할 때 객체 ("phoneInstance")를 확인할 필요가 없거나 null이 아닙니다.

0

안전 탐색 연산자 (?.)는 왼쪽 개체가 null 인 경우 null을 반환하고, 그렇지 않으면 해당 개체의 오른쪽 멤버 값을 반환합니다. 그래서 phoneInstance?.name은 예를 들어 phoneInstance == null ? null : phoneInstance.name

에 대한 shorthandn된다

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