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 的空构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Spring 代理类和 Kotlin 中的空指针异常

Firebase 云函数 - 对象不能用 JSON 编码 - Kotlin 数据类

尝试在 recyclerview kotlin 上的空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)

com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为数据类对象 KOTLIN

将数据类的对象添加到 Kotlin 的 Firestore 时如何添加 Firebase 时间戳?

Kotlin 初学者类和对象