Kotlin Realm:如果类包含自定义构造函数,则必须声明没有参数的公共构造函数

时间:2018-03-08 07:44:18

标签: android kotlin realm

我在 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找到任何与此相关的问题。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:13)

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

像这样更改Realm对象:

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

现在它将编译。

<强>原因:

  

当未分配默认值时,它将成为参数   构造函数,Realm需要一个没有参数的公共构造函数。   当分配默认值时,它将成为该属性   类。因此,默认情况下您将获得空构造函数并清除代码。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

错误:

_id,purposeEn,purposeAr not initialized

<强>解决方案

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