Класс данных Kotlin для RealmObject

Я использую Kotlin и Realm для записи класса данных

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

Мне нужно сохранить данные в db, поэтому я использую Realm для его сохранения. Но, как мы знаем, если я хочу сохранить класс в Realm, класс AuthToken должен расширять RealmObject.

В этой проблеме Котлин говорит, что классы данных не могут расширять классы. поэтому я отказываюсь от класса данных, просто используя обычный класс Kotlin в качестве модели, возникает еще один вопрос:

Класс Kotlin не имеет геттера или сеттера. Как мы знаем, класс Realm должен установить все свойство private и записать getter и setter.

Теперь мне интересно, как решить проблему.

Ответы

Ответ 1

В настоящее время Realm не поддерживает классы данных. Вы можете увидеть пример того, как писать классы совместимых с Realm классов в Kotlin здесь: 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

Любое свойство Kotlin в классе имеет getter и setter. Поэтому я считаю, что код должен работать только по вашему мнению (без модификатора data).

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

P.S. Я согласен с тем, что документы о свойствах неясны по этому вопросу.