我從Kotlin開始嘗試理解某些東西。爲什麼var foo = null編譯
var foo: String = null
沒有按預期編譯。
var foo: String? = null
應該是正確的語法和編譯預期。
那麼爲什麼var foo = null
編譯?
我從Kotlin開始嘗試理解某些東西。爲什麼var foo = null編譯
var foo: String = null
沒有按預期編譯。
var foo: String? = null
應該是正確的語法和編譯預期。
那麼爲什麼var foo = null
編譯?
在這種情況下foo
的類型將被推斷爲Nothing?
,這是一個非常特殊的類型。簡而言之,Nothing
是一種類型,它是Kotlin中每種類型的子類型(因此Nothing?
是每個可爲空類型的子類型),沒有實例,並且可以用作無法返回的函數的返回類型。
即使Nothing
可以沒有實例,null
本身的類型Nothing?
,這就是爲什麼它可以分配給任何可爲空的變量。
您可以瞭解更多深約在official docsNothing
,在this excellent Medium article,並在this article覆蓋整個科特林類型層次。
對於var foo = null
,類型推斷Nothing?
,因此是有效的語法。
I.e.你只能在該變量中存儲空值。 –
var foo = null
相當於var foo:Nothing? = null
同樣
var foo = ""
相當於var foo:String = ""
和SLO
var foo = 1
等同於var foo:Int = 1
編譯器是智能enou gh從右手錶達式推斷foo
的類型。
爲什麼你期望它*不*編譯?科特林只是推斷一個合適的類型。 –