ฉันกำลังแปลง 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)
 !!จะโยนถ้ามีค่าเป็นNullPointerExceptionnull
มันมีการบันทึกไว้ที่นี่พร้อมกับ 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!!