2015-12-17 84 views

回答

70

這是不安全的空類型(T?)轉換到一個非空類型(T)。 如果價值爲null,它將拋出NullPointerException

它記錄here連同Kotlin無效安全的手段。

+0

這是什麼意思時,''!!是在聲明的結尾? IJ自動轉換爲Kotlin爲我做了'val price = sale.latest !!' – ycomp

+1

@ycomp,這意味着'sale.latest'可以包含'null';只有當'sale.latest'不爲空時,分配纔會成功,否則將拋出NPE。這爲val價格提供了無效安全性:它的類型將是非空的。請參閱https://kotlinlang.org/docs/reference/null-safety.html – hotkey

22

下面是一個例子,使事情更清晰。 說你有這個功能

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