领域中的多态关系
Polymorphic relations in realm
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
如何才能达到上述目的?
Realm 不支持多态和继承。您可以关注此问题以获取更新:https://github.com/realm/realm-java/issues/761
通常我们推荐使用组合:https://en.wikipedia.org/wiki/Composition_over_inheritance,但在您的情况下这可能并不理想,因为它看起来像这样:
public class IBaseA extends RealmObject {
ChildA childA;
ChildB childB;
}
为每个具体 class 创建一个 RealmObject,将基础展平为 RealmObject。使用通用接口共享字段访问器。
和
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
如何才能达到上述目的?
Realm 不支持多态和继承。您可以关注此问题以获取更新:https://github.com/realm/realm-java/issues/761
通常我们推荐使用组合:https://en.wikipedia.org/wiki/Composition_over_inheritance,但在您的情况下这可能并不理想,因为它看起来像这样:
public class IBaseA extends RealmObject {
ChildA childA;
ChildB childB;
}
为每个具体 class 创建一个 RealmObject,将基础展平为 RealmObject。使用通用接口共享字段访问器。
和