2015-12-19 103 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,这是一个很长的文本)。 –