Kotlin境界。如果类包含自定义构造函数,必须声明一个没有参数的公共构造函数

19 人关注

我正在创建一个 境界 object in Kotlin .

境界 Object:

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
Bhuvanesh BS
Bhuvanesh BS
发布于 2018-03-08
5 个回答
Bhuvanesh BS
Bhuvanesh BS
发布于 2018-03-08
已采纳
0 人赞同

要清除这个错误,你必须给属性指定默认值。

像这样改变境界对象。

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

Now it will compile.

原因是什么?

当默认值没有被分配时,它将成为构造函数的参数。 构造函数的参数,Realm需要一个没有参数的公共构造函数。 当默认值被指定时,它将成为 类的属性。所以你将得到默认的空构造函数和干净的代码。

Good one here; helped
EpicPandaForce
EpicPandaForce
发布于 2018-03-08
0 人赞同

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

open class PurposeModel : RealmObject() {
    @field:PrimaryKey
    var id: Long? = null
    var purposeEn: String? = null
    var purposeAr: String? = null
    
Adrian Witaszak
Adrian Witaszak
发布于 2018-03-08
0 人赞同

我在我的Ktor服务器上使用Realm,你需要提供一个带有默认值的空构造函数。

@Serializable
class User(
    val id: String,
    var email: String,
    var hashedPass: ByteArray,
) : RealmObject {
    constructor() : this(
        id = ObjectId.create().toString(),
        email = "",
        hashedPass = byteArrayOf()
    ) // Empty constructor for Realm

没有它,我就会出现错误。

[Realm] Cannot find primary zero arg constructor
    
marlonpya
marlonpya
发布于 2018-03-08
0 人赞同

Error:

_id, purposeEn, purposeAr未被初始化

Solution

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