2
IBaseA   <--- Interface
CBaseB   <--- Concrete base class

ChildA implements IBaseA{
    //fields and getters, setters
}

ChildB extends CBaseB, implements IBaseA{
    //fields and getters, setters  
}

TestClass implements RealmModel{
    private IBaseA child_obj;
}

以这种方式制作 TestClass 的目的是能够将任何 ChildA 或 ChildB 对象分配给 TestClass.child_obj,并且仍然能够让 ChildA 和 ChildB 根据需要实现其他接口。

但是,这会导致编译时异常

Error:(12, 8) error: Type 'in.avanti_app.student_companion.realmClasses.TestClass' of field 'child_obj' is not supported

我们怎样才能达到上述目的呢?

4

2 回答 2

1

Realm 不支持多态性和继承。您可以关注此问题进行更新:https ://github.com/realm/realm-java/issues/761

通常,我们建议使用 Composition:https ://en.wikipedia.org/wiki/Composition_over_inheritance ,但在您的情况下这可能并不理想,因为它看起来像这样:

public class IBaseA extends RealmObject { ChildA childA; ChildB childB; }

于 2017-02-23T15:27:22.447 回答
0

为每个具体类创建一个 RealmObject,将基础扁平化为 RealmObject。使用通用接口共享字段访问器。

阅读这个 github 评论

具有 Gson 序列化的 RealmObjects 的组合继承

于 2017-02-24T18:58:02.923 回答