2011-01-03 38 views

Trả lời

62

Đây là "Toán tử điều hướng an toàn", là một tính năng Groovy tránh chính xác ngoại lệ con trỏ null. Xem http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

Trong trường hợp này, nếu phoneInstance là không, thì nó không cố lấy thuộc tính name và gây ra NPE - nó chỉ đặt giá trị của thẻ trường thành rỗng.

+0

Cảm ơn bạn! Tôi đã googling nó một lúc nhưng không tìm thấy một câu trả lời. –

+0

Các url 404 bây giờ là – juan

+11

Để tăng thêm sự mát mẻ, bạn cũng có thể thêm một giá trị mặc định hợp lý với toán tử Elvis, ví dụ: '$ {phoneInstance? .number?: '+ 44'}' Rock groovy with the king baby! – barrymac

4

Toán tử ? cho phép giá trị null trong Groovy (và do đó, GSP). Ví dụ, bình thường trong GSP,

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

Nếu priceDetails là null, điều này sẽ ném một NullPointerException.

Nếu chúng ta sử dụng toán tử ? thay vì ...

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

bây giờ giá trị của ${priceDetails?.amount} là null, thay vì ném một con trỏ ngoại lệ null.

1

Đây là tính năng rất quan trọng trong Groovy. Nếu đối tượng là null (tức là, "phoneInstance" là null) thì nó cung cấp giá trị "null". Tính năng này được gọi là "Nhà điều hành an toàn điều hướng". Đơn giản khi chúng ta sử dụng tính năng này, Không cần kiểm tra đối tượng ("phoneInstance") là null hay không.

0

toán tử điều hướng an toàn (?.) Trả về giá trị rỗng nếu đối tượng ở bên trái là rỗng, nếu không nó sẽ trả về giá trị của thành viên phù hợp của đối tượng đó. nên phoneInstance?.name chỉ là shorthandn cho phoneInstance == null ? null : phoneInstance.name

ví dụ:

a = x?.y 

chỉ là viết tắt cho:

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

mà là viết tắt cho:

if(x == null){ 
    a = null 
} else { 
    a = x.y 
} 
Các vấn đề liên quan