Android
Kotlin
Realm

【Android】KotlinでRealm利用時の"Cannot inherit from final class"エラー対処法

More than 1 year has passed since last update.

結論

RealmObjectを継承したクラスにopen修飾子をつける。

環境

Kotlin: 1.1.4-3
Realm: 3.5.0

エラー内容

Error:(33, 85) error: cannot inherit from final Foo

サンプルコード

:no_good: コンパイルエラー

class Foo: RealmObject() {
    var id: Long = 0
}

:ok_woman: OK

open class Foo: RealmObject() {
    var id: Long = 0
}

原因

Realmがコンパイル時に生成するProxyクラスがRealmObjectを継承したFooクラスを継承するため。
/app/build/generated/source/kapt/debug/io/realm/FooRealmProxy.javaのクラス宣言部分

public class FooRealmProxy extends rkowase.sample.Foo
    implements RealmObjectProxy, FooRealmProxyInterface {

参考

Realm Java 3.5.0
https://realm.io/jp/docs/java/latest/