簡體   English   中英

Kotlin/Java 可空性設置

[英]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()
    (...)
}

來自Kotlin 在行動

有時 Java 代碼包含有關可空性的信息,使用注釋表示。 當此信息出現在代碼中時,Kotlin 將使用它。 因此@Nullable String被視為String? 通過 Kotlin,@NotNull @NotNull String只是String 有趣的問題是當注釋不存在時會發生什么。 在這種情況下,Java 類型成為 Kotlin 中的平台類型。

平台類型

平台類型本質上是 Kotlin 沒有可空性信息的類型; 您可以將其作為可空類型或非空類型使用。 這意味着,就像在 Java 中一樣,您對使用該類型執行的操作負全部責任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM