34

我正在使用 Kotlin 和 Realm 编写数据类

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

我必须将数据保存到db,所以我使用Realm来保存它。但正如我们所知,如果我想将类保存到 Realm,则AuthToken类必须扩展RealmObject.

这就是问题所在,Kotlin 说数据类不能扩展类。所以我放弃了数据类,只使用普通的 Kotlin 类作为模型,那么另一个问题来了:

Kotlin 类没有 getter 或 setter。正如我们所知,Realm 类必须将所有属性设置为私有并编写 getter 和 setter。

现在我想知道如何解决这个问题。

4

2 回答 2

39

Realm 目前不支持 Data 类。您可以在此处查看如何在 Kotlin 中编写 Realm 兼容模型类的示例:https ://github.com/realm/realm-java/tree/master/examples/kotlinExample/src/main/kotlin/io/realm/examples /kotlin/模型

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() {
于 2015-12-21T07:30:11.933 回答
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

PS我同意关于属性的文档在这个问题上不清楚

于 2015-12-19T11:32:03.703 回答