2015-12-19 100 views
17

我使用科特林和境界寫一個數據類科特林數據類的RealmObject

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

我必須將數據保存到數據庫,所以我用領域進行保存。但是,正如我們所知道的,如果我想將課程保存到Realm中,01​​課程必須延長RealmObject

這就是問題所在,Kotlin說數據類不能擴展類。 所以我放棄數據類,只是使用一個普通的Kotlin類作爲模型,然後另一個問題來了:

Kotlin類沒有getter或setter。正如我們所知道的,Realm類必須將所有屬性設置爲private,並寫入getter和setter。

現在我想知道如何解決這個問題。

+0

我也經歷了SugarORM這個問題.... Jetbrains的都問了它的反饋...您可以發表cooments到這篇文章雖然:http://blog.jetbrains.com/kotlin/2015/09/feedback-request-limitations-on-data-classes/ –

回答

22

Realm當前不支持Data類。你可以看到如何在科特林寫境界兼容的模型類,這裏一個例子: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

我們有任何更新嗎?在Realm 3.0.0中,我看到final字段仍然不被允許(這就是爲什麼使用open)的原因,但是因此您將失去數據類自動提供的派生方法。 – GoRoS

+2

數據類基本上是有問題的,因爲它們基本上做了AutoValue的工作,所以我們可以永遠支持數據類作爲RealmObjects。參見例如https://github.com/realm/realm-java/issues/4291,它描述了我們目前的想法。 (搜索AutoValue,這是一個很長的文本)。 –