Câu trả lời:
Đây là T?
chuyển đổi loại nullable ( ) không an toàn thành loại không nullable ( T
),
!!
sẽ ném NullPointerException
nếu giá trị là null
.
Nó được ghi lại ở đây cùng với phương tiện an toàn vô hiệu của Kotlin.
sale.latest
có thể chứa null
; nhiệm vụ sẽ chỉ thành công nếu sale.latest
không phải là null và sẽ ném NPE theo cách khác. Điều này mang lại sự an toàn cho null val price
: loại của nó sẽ không null. Xem kotlinlang.org/docs/reference/null-safe.html
!!
bạn có thể không nhanh và xác định nguyên nhân gốc của NPE. Tôi ước Java có một tính năng tương tự (đó là, các if
câu lệnh và / hoặc assert
các ion xấu xí ).
Dưới đây là một ví dụ để làm cho mọi thứ rõ ràng hơn. Nói rằng bạn có chức năng này
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Điều này sẽ tạo ra lỗi biên dịch sau.
Null can not be a value of a non-null type String
Bây giờ bạn có thể ngăn chặn điều đó bằng cách thêm một dấu hỏi vào String
loại để làm cho nó không có giá trị.
Vì vậy chúng tôi có
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Điều này tạo ra kết quả của
null
Bây giờ nếu chúng ta muốn hàm ném một ngoại lệ khi giá trị của email là null, chúng ta có thể thêm hai dấu chấm than ở cuối email. Như thế này
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Điều này sẽ ném một KotlinNullPointerException
Toán tử Double-bang là một lựa chọn tuyệt vời cho người hâm mộ NullPointerException
(hoặc viết tắt là NPE).
Các nhà điều hành khẳng định không null
!!
chuyển đổi bất kỳ giá trị cho một loại không null và ném một ngoại lệ nếu giá trị là null.
val nonNull = a!!.length
Vì vậy, bạn có thể viết a!!
và điều này sẽ trả về giá trị khác không a
( String
ví dụ ở đây) hoặc ném NPE nếua
là null.
Nếu bạn muốn có một NPE, bạn có thể có nó, nhưng bạn phải yêu cầu nó một cách rõ ràng. Toán tử này nên được sử dụng trong trường hợp nhà phát triển đảm bảo - giá trị sẽ không bao giờ là null .
!!
phần cuối của một tuyên bố? IJ tự động chuyển đổi sang Kotlin đã làm điều đó cho tôival price = sale.latest!!