我需要解析 Firebase DataSnapshot
(一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 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'"
}
}
还有
requireNotNull
, check
, error
和其他一些。这些在 Kotlin 中称为前提条件。这里没有魔法,它们只是一些辅助函数。您可以查看实际来源here ,非常有用。有一篇关于该主题的相关博客文章 here .
关于Kotlin 初始化 : how to fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308742/