【问题标题】:Kotlin Realm: Class must declare a public constructor with no arguments if it contains custom constructorsKotlin Realm:如果类包含自定义构造函数,则必须声明一个不带参数的公共构造函数
【发布时间】:2018-03-08 07:44:18
【问题描述】:

我正在 Kotlin 中创建一个 Realm 对象。

领域对象:

open class PurposeModel(var _id: Long?,
                        var purposeEn: String?,
                        var purposeAr: String?) : RealmObject()

当我编译上面的代码时,我得到了这个错误:

error: Class "PurposeModel" must declare a public constructor with no arguments if it contains custom constructors.

我在 Kotlin 中找不到任何与此相关的问题。我该如何解决这个问题?

【问题讨论】:

    标签: android kotlin realm


    【解决方案1】:

    要清除此错误,您必须为属性分配默认值。

    像这样改变领域对象:

    open class PurposeModel(
        var _id: Long? = 0,
        var purposeEn: String? = null,
        var purposeAr: String? = null
    ) : RealmObject()
    

    现在可以编译了。

    原因:

    默认值未赋值时,将成为参数 构造函数,Realm 需要一个不带参数的公共构造函数。 当分配了默认值时,它将成为该属性的 班级。所以默认情况下你会得到空的构造函数和干净的代码。

    【讨论】:

      【解决方案2】:

      这就是为什么我更喜欢这样定义它们

      open class PurposeModel : RealmObject() {
          @field:PrimaryKey
          var id: Long? = null
          var purposeEn: String? = null
          var purposeAr: String? = null
      }
      

      【讨论】:

        【解决方案3】:

        您也可以使用Kotlin no-arg plugin 为您生成一个无参数的构造函数。

        【讨论】:

        • 看来是不可能的,见this answer,如果可以的话,请您提供一个更完整的答案吗?
        • 嗨,@GabrielDeOliveiraRohden。我不知道 Realm 在内部是如何工作的(为什么它需要 noarg 构造函数)。在编写答案时,我假设它的工作方式类似于 Hibernate(即 JavaEE ORM),后者使用无参数构造函数构造实体。我在我的项目中使用了带有 Hibernate 的 no-arg 插件,它运行良好。虽然,我还没有尝试过 Realm。
        【解决方案4】:

        错误:

        _id, purposeEn, purposeAr 未初始化

        解决方案

        open class PurposeModel(
        var _id: Long? = 0,
        var purposeEn: String? = "",
        var purposeAr: String? = ""
        ) : RealmObject()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-12
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-17
          • 2012-08-21
          • 1970-01-01
          相关资源
          最近更新 更多