最佳实践以及如何实现需要支持不同类型对象的RealmList

时间:2016-04-27 08:39:41

标签: android realm realm-list

我有一个模特&#39; A&#39;有一个列表可以是&#39; B&#39;或者&#39; C&#39;和更多。 我知道Realm不支持多态性,我不能RealmList<RealmObject>RealmList<? extends RealmObject>

我无法弄清楚如何使用Realm实现此行为。

1 个答案:

答案 0 :(得分:1)

此处跟踪多态性支持:https://github.com/realm/realm-java/issues/761,但只要未实现,您就必须改为使用组合(https://en.wikipedia.org/wiki/Composition_over_inheritance

在你的情况下,它看起来像这样:

public interface MyContract {
  int calculate();
}

public class MySuperClass extends RealmObject implements MyContract {
  private A a;
  private B b;
  private C c;

  @Override
  public int calculate() {
    return getObj().calculate();
  }

  private MyContract getObj() {
    if (a != null) return a;
    if (b != null) return b;
    if (c != null) return c;
  }

  public boolean isA() { return a != null; }
  public boolean isB() { return b != null; }
  public boolean isC() { return c != null; }

  // ...
}