簡體   English   中英

Kotlin初始化:如何失敗

[英]Kotlin initialization: how to fail

我需要將Firebase DataSnapshot (一個JSON對象)解析為一個數據類,其屬性包括枚舉和列表。 所以我更喜歡通過將DataSnapshot傳遞給輔助構造函數來手動解析它。 但是,如果DataSnapshot中缺少某些字段,我希望構造失敗。 在Swift中,它有可用的初始化程序,它返回null,所以我知道它已經失敗了。 如何在Kotlin做到這一點?

以下是我的嘗試,但我認為你不能只是從構造函數返回,對吧?

data class Unit(val name: String, val type: UnitType, val components: List<Component>) {
    constructor(snapshot: DataSnapshot) {
        name = snapshot.child("name").value as? String ?: return
        val typeString = snapshot.child("type").value as? String ?: return
        type = UnitType.values().firstOrNull { it.abbrv == typeString } ?: return
        ...
    }

}

有為此目的設計的require函數:

// ...
init {
    require(foo == "bar") {
        "$foo should be equal to 'bar'"
    }
}

還有requireNotNullcheckerror和其他一些。 這些在Kotlin中被稱為先決條件 這里沒有魔法,它們只是一些輔助功能。 您可以在這里查看實際來源,非常有用。 有一個關於該主題相關的博客文章在這里

不,你不能只是從構造函數返回 - 它在概念上沒有多大意義 - 但由於我對Kotlin語法相當天真,我將在這里回答更廣泛的范例。

您的數據類不負責錯誤檢查或錯誤處理。 它只負責存儲數據。 因此,當且僅當沒有缺少字段時,您應該依賴工廠模式來解析DataSnapshot的結果並有條件地實例化Unit的新實例。

暫無
暫無

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

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