2016-04-27 1 views
1

У меня есть модель «A», которая имеет список, который может иметь тип «B» или «C» и многое другое. Я знаю, что Полиморфизм не поддерживается Realm, и я не могу сделать RealmList<RealmObject> или RealmList<? extends RealmObject>.Лучшая практика и как реализовать RealmList, который должен поддерживать различные типы объектов

Я просто не могу понять, как реализовать это поведение в Realm.

ответ

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; } 

    // ... 
} 
Смежные вопросы