[英]Kotlin/Java nullability setting
在 okhttp3.ws.WebSocketListener 中給出這個 Java 接口:
public interface WebSocketListener {
(...)
void onFailure(IOException e, Response response);
(...)
}
Kotlin 假定這樣的簽名:
override fun onFailure(e: IOException, response: Response) {
e.printStackTrace()
(...)
}
如果我現在以飛行模式啟動我的應用程序,它會嘗試連接到 web 套接字。 web 套接字無法連接並向“onFailure()”返回“空”響應——此時這是正確的。 但是 Kotlin 檢查響應是 null 並且甚至在它可以打印異常堆棧跟蹤之前就讓我的應用程序崩潰了。
所以:我如何強制 Kotlin 為任何未注釋的內容假設“@Nullable”?
該設置應該是項目范圍的,而不是系統范圍的。
谷歌上的幾次搜索都沒有給出可用的結果。 所以我想知道我是不是第一個遇到這個問題的人,Kotlin是否已經可以使用了。
我真的需要將 class 轉換回 Java 嗎?
在處理沒有可空性信息的 java 類型時,您可以將其作為可空或非空類型來處理。 在您的情況下,這意味着您可以簡單地更改對 Response 的response
類型Response?
.
override fun onFailure(e: IOException, response: Response?) {
e.printStackTrace()
(...)
}
有時 Java 代碼包含有關可空性的信息,使用注釋表示。 當此信息出現在代碼中時,Kotlin 將使用它。 因此
@Nullable String
被視為String?
通過 Kotlin,@NotNull@NotNull String
只是String
。 有趣的問題是當注釋不存在時會發生什么。 在這種情況下,Java 類型成為 Kotlin 中的平台類型。
平台類型本質上是 Kotlin 沒有可空性信息的類型; 您可以將其作為可空類型或非空類型使用。 這意味着,就像在 Java 中一樣,您對使用該類型執行的操作負全部責任。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.