web-dev-qa-db-fra.com

Domaine Kotlin: la classe doit déclarer un constructeur public sans arguments s'il contient des constructeurs personnalisés

Je crée un objet Realm dans Kotlin.

Objet du royaume:

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

Lorsque je compile le code ci-dessus, j'obtiens cette erreur:

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

Je ne trouve aucune question à ce sujet dans Kotlin. Comment résoudre ça?

10
Bhuvanesh BS

Pour effacer cette erreur, vous devez affecter des valeurs par défaut aux propriétés.

Modifiez l'objet de domaine comme ceci:

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

Maintenant, il va compiler.

Raison:

Lorsque la valeur par défaut non affectée deviendra les paramètres du constructeur, Realm a besoin d'un constructeur public sans arguments. Lorsque la valeur par défaut attribuée, elle deviendra les propriétés de la classe. Vous obtiendrez donc un constructeur vide par défaut et un code propre.

23
Bhuvanesh BS

C'est pourquoi je préfère les définir comme ça

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

Vous pouvez également utiliser plugin Kotlin no-arg qui génère un constructeur sans arg pour vous.

0
Maroš Šeleng

Erreur:

_id, purposeEn, purposeAr non initialisé

Solution

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