JGu*_*Guo 5 initialization kotlin
我需要将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
...
}
}
Run Code Online (Sandbox Code Playgroud)
有require
为此目的而设计的功能:
// ...
init {
require(foo == "bar") {
"$foo should be equal to 'bar'"
}
}
Run Code Online (Sandbox Code Playgroud)
还有requireNotNull
,check
,error
和其他一些人。这些在Kotlin 中称为先决条件。这里没有魔术,它们只是一些辅助功能。您可以在此处查看实际来源,这非常有用。有一个关于该主题相关的博客文章在这里。
不,你不能只从构造函数返回 - 这在概念上没有多大意义 - 但由于我对 Kotlin 语法相当天真,所以我将在这里回答更广泛的范例。
您的数据类不负责错误检查或错误处理。它只负责存储数据。因此,您应该依赖工厂模式来解析 a 的结果DataSnapshot
,并有条件地实例化 if 的新实例Unit
,仅当没有缺少字段时。
归档时间: |
|
查看次数: |
817 次 |
最近记录: |