2017-05-07 29 views
33

Kotlin中的單個感嘆號意味着什麼?我已經看過幾次,特別是使用Java API的時候。但是我無法在文檔或StackOverflow中找到它。Kotlin中的單個感嘆號

回答

43

它們被稱爲platform types,它們表示Kotlin不知道該值是否可以爲null並且由您決定它是否可以爲空。

概括地說,問題是,從Java未來的任何引用可以爲空,科特林,通過設計被空安全,迫使用戶爲空,檢查每一個Java值,或者使用安全的調用(?. )或非空斷言(!!)。那些在純Kotlin世界中非常方便的功能,當你不得不在Kotlin/Java環境中經常使用它們時,往往會變成一場災難。

這就是爲什麼我們採取了激進的做法和取得科特林的類型系統時談到Java的互操作更輕鬆:現在從Java未來的引用都特意標明類型 - Kotlin Blog

1

!譜寫的類型稱爲平臺鍵入,這是一種類型來自Java,因此最可能是null。這是Kotlin編譯器在調用Java時推斷的內容(對於最基本的情況,Java方法可以用annotated來解決這個問題)。除非您確實知道特定的API永遠不會返回null,否則您應該處理的平臺類型爲可爲空的類型。編譯器允許將平臺類型分配給可爲空和非空類型的變量。

Notation for Platform Types

[...]

T!意味着 「T or T?」[...]

您可以參考的平臺類型爲「類型的未知可空性「。另外重要的是要知道,你不能爲自己的類型使用感嘆號標記的類型,它不是Kotlin語法的一部分,它只是一個符號。