web-dev-qa-db-fra.com

Classe de données Kotlin de RealmObject

J'utilise Kotlin et Realm pour écrire une classe de données

data class AuthToken(val register: Boolean,
                     val token: String,
                     val tokenSecret: String,
                     val user: AuthUser)

Je dois enregistrer les données sur db, donc j'utilise Realm pour les enregistrer. Mais comme nous le savons, si je veux enregistrer la classe dans Realm, la classe AuthToken doit étendre RealmObject.

C'est le problème, Kotlin dit que les classes de données ne peuvent pas étendre les classes. donc j'abandonne la classe de données, en utilisant simplement une classe Kotlin normale comme modèle, une autre question se pose:

La classe Kotlin n'a ni getter ni setter. Comme nous le savons, la classe Realm doit définir toutes les propriétés privées et écrire getter et setter.

Maintenant, je me demande comment résoudre le problème.

30
Allen Vork

Realm ne prend pas en charge les classes de données actuellement. Vous pouvez voir un exemple de la façon d'écrire des classes de modèle compatibles avec Realm dans Kotlin ici: https://github.com/realm/realm-Java/tree/master/examples/kotlinExample/src/main/kotlin/io/royaume/exemples/kotlin/modèle

public open class Person(
        @PrimaryKey public open var name: String = "",
        public open var age: Int = 0,
        public open var dog: Dog? = null,
        public open var cats: RealmList<Cat> = RealmList(),
        @Ignore public open var tempReference: Int = 0,
        public open var id: Long = 0
) : RealmObject() {
36
Christian Melchior

Toute propriété Kotlin dans toute classe a un getter et un setter. Je pense donc que votre code devrait simplement fonctionner comme vous l'avez suggéré (sans modificateur data).

https://kotlinlang.org/docs/reference/data-classes.html#data-classeshttps://kotlinlang.org/docs/reference/Java-to-kotlin- interop.html # properties

P.S. Je suis d'accord que les documents sur les propriétés ne sont pas clairs sur le sujet

1
voddan