【问题标题】:Empty constructor for kotlin object to use Firebasekotlin 对象使用 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)

错误:

缺少一个没有参数的构造函数

有没有更好的解决方案?

【问题讨论】:

    标签: android firebase-realtime-database kotlin


    【解决方案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 文档中说明了该要求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      • 2019-11-22
      • 2019-06-02
      • 2019-01-10
      • 2020-11-27
      • 2021-01-06
      相关资源
      最近更新 更多