kotlin 对象使用 Firebase 的空构造函数
Posted
技术标签:
【中文标题】kotlin 对象使用 Firebase 的空构造函数【英文标题】:Empty constructor for kotlin object to use Firebase 【发布时间】:2016-11-12 06:30:44 【问题描述】:我正在尝试从 Kotlin 将对象保存在 Firebase 数据库中,
我觉得提供一个默认的空构造函数并将值设置为nullable
感觉不对,必须更改我所有的代码。
我的班级:
class Video(var id: String, var url: String, var owner: User) :
constructor() : this("", "", User("", "", ""))
Firebase 推送:
FirebaseDatabase.getInstance().reference.child("public").push().setValue(video)
错误:
缺少一个没有参数的构造函数
有没有更好的解决方案?
【问题讨论】:
【参考方案1】:使用默认参数:
class Video(var id: String = "", var url: String = "",
var owner: User = User("", "", ""))
(另外,考虑使用val
)。
【讨论】:
val
是不可变的。反序列化器将无法设置实际值,您最终会得到一堆具有相同(默认)值的对象。【参考方案2】:
我还没有测试过它是否适用于 Firebase,但根据kotlin documentation,
注意:在 JVM 上,如果主构造函数的所有参数都有默认值,编译器将生成一个额外的无参数构造函数,它将使用默认值。这使得 Kotlin 更容易与 Jackson 或 JPA 等库一起使用,这些库通过无参数构造函数创建类实例。
所以我想,通过为所有构造函数参数应用默认值将为您生成无参数构造函数。
【讨论】:
【参考方案3】:您需要向 Video 类添加一个空的构造函数。这是在 Firebase 中使用类所必需的。
【讨论】:
但这不会与可为空的类型产生一些不一致,并且仅仅因为这个要求而设计的东西变得很奇怪? 我不确定,你必须测试一下。 Firebase 文档中说明了该要求。以上是关于kotlin 对象使用 Firebase 的空构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 云函数 - 对象不能用 JSON 编码 - Kotlin 数据类
尝试在 recyclerview kotlin 上的空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)
com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为数据类对象 KOTLIN