2015-12-19 1 views
17

J'utilise Kotlin et Royaume d'écrire une classe de donnéesKotlin classe de données de RealmObject

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

Je dois enregistrer les données db, donc j'utiliser Realm pour le sauver. Mais comme nous le savons, si je veux enregistrer la classe au Royaume, 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, juste en utilisant une classe Kotlin normale comme modèle puis une autre question vient:

La classe Kotlin n'a pas de getter ou 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.

+0

J'ai aussi cette question avec SugarORM .... JetBrains ont demandé des commentaires sur ... Vous pouvez poster cooments à ce post cependant: http://blog.jetbrains.com/kotlin/2015/09/feedback-request-limitations-on-data-classes/ –

Répondre

22

Royaume ne supporte pas les classes de données actuellement. Vous pouvez voir un exemple de la façon d'écrire des classes de modèle compatible Realm en Kotlin ici: https://github.com/realm/realm-java/tree/master/examples/kotlinExample/src/main/kotlin/io/realm/examples/kotlin/model

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() { 
+2

Avons-nous des nouvelles à ce sujet? Dans Realm 3.0.0, je vois que les champs finaux ne sont toujours pas autorisés (c'est pourquoi vous utilisez open), mais vous perdez donc ces méthodes dérivées que les classes de données fournissent automatiquement. – GoRoS

+2

Les classes de données sont fondamentalement problématiques car elles font essentiellement ce que fait AutoValue, donc il est douteux que nous puissions jamais supporter les classes de données en tant que RealmObjects. Voir https://github.com/realm/realm-java/issues/4291 qui décrit notre pensée actuelle. (Recherche de AutoValue, c'est un texte assez long). –