ฉันกำลังแปลง Java เป็น Kotlin ด้วย Android Studio ฉันได้รับผลกระทบสองครั้งหลังจากตัวแปรอินสแตนซ์ Double Bang คืออะไรและที่สำคัญกว่านั้นเอกสารนี้คืออะไร
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
ฉันกำลังแปลง Java เป็น Kotlin ด้วย Android Studio ฉันได้รับผลกระทบสองครั้งหลังจากตัวแปรอินสแตนซ์ Double Bang คืออะไรและที่สำคัญกว่านั้นเอกสารนี้คืออะไร
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
คำตอบ:
นี้เป็นที่ไม่ปลอดภัยประเภท nullable ( T?
แปลง) เป็นชนิดที่ไม่ใช่ nullable ( T
)
!!
จะโยนถ้ามีค่าเป็นNullPointerException
null
มันมีการบันทึกไว้ที่นี่พร้อมกับ Kotlin หมายถึงความปลอดภัยเป็นโมฆะ
sale.latest
สามารถมีได้null
; การมอบหมายจะสำเร็จก็ต่อเมื่อsale.latest
ไม่ใช่โมฆะและจะโยน NPE เป็นอย่างอื่น สิ่งนี้ให้ความปลอดภัยเป็นโมฆะสำหรับval price
: ประเภทของมันจะไม่เป็นโมฆะ ดูkotlinlang.org/docs/reference/null-safety.html
!!
คุณสามารถล้มเหลวอย่างรวดเร็วและค้นหาสาเหตุของ NPE ฉันหวังว่า Java มีคุณสมบัติที่คล้ายกัน (นั่นคือif
คำสั่งw / o น่าเกลียดและ / หรือassert
ไอออน)
นี่คือตัวอย่างเพื่อทำให้สิ่งต่าง ๆ ชัดเจนขึ้น สมมติว่าคุณมีฟังก์ชั่นนี้
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
สิ่งนี้จะสร้างข้อผิดพลาดในการรวบรวมดังต่อไปนี้
Null can not be a value of a non-null type String
ตอนนี้คุณสามารถป้องกันได้โดยเพิ่มเครื่องหมายคำถามลงในString
ประเภทเพื่อทำให้เป็นโมฆะ
ดังนั้นเราจึงมี
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
สิ่งนี้ก่อให้เกิดผล
null
ตอนนี้ถ้าเราต้องการให้ฟังก์ชันส่งข้อยกเว้นเมื่อค่าของอีเมลเป็นโมฆะเราสามารถเพิ่มอัศเจรีย์สองตัวที่ส่วนท้ายของอีเมล แบบนี้
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
นี่จะเป็นการโยน KotlinNullPointerException
ตัวดำเนินการ Double-bangเป็นตัวเลือกที่ยอดเยี่ยมสำหรับแฟน ๆ ของNullPointerException
(หรือ NPE สำหรับระยะสั้น)
ผู้ประกอบการยืนยันไม่ null
!!
แปลงค่าใด ๆ ไปไม่ใช่ประเภท nullและพ่นยกเว้นถ้าค่าเป็นโมฆะ
val nonNull = a!!.length
ดังนั้นคุณสามารถเขียนa!!
และสิ่งนี้จะส่งกลับค่าที่ไม่ใช่a
ศูนย์ ( String
เช่นที่นี่) หรือโยน NPE ถ้าa
เป็นโมฆะ
หากคุณต้องการ NPE คุณสามารถรับได้ แต่คุณต้องขออย่างชัดเจน ผู้ประกอบการนี้ควรจะใช้ในกรณีที่มีนักพัฒนาที่มีการรับประกัน - ค่าจะไม่เป็นโมฆะ
!!
คำแถลงสิ้นสุด? IJ แปลงเป็น Kotlin ให้ฉันโดยอัตโนมัติval price = sale.latest!!