【发布时间】:2018-07-12 14:52:33
【问题描述】:
我需要将 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
...
}
}
【问题讨论】:
-
虽然你不能返回,你可以抛出一个异常,这将允许调用者正确处理失败的构造。此外,我不会将 Kotlin 中的类称为
Unit,因为它是 void 的内置类型,可能会导致一些混乱。
标签: kotlin initialization