从Realm获取Generic类型的Realm对象

时间:2017-05-18 13:42:31

标签: java android generics realm

我想要实现的目标是通过Realm进行通用响应缓存。 API客户端使用Retrofit。在改造回调中,我想在Realm中缓存传入的响应。回调是通用的,我想将它应用于许多Retrofit调用。 Callback类与此

类似
public class CachedApiCallback 
    <E extends RealmObject, T extends List<E>>
implements Callback<T> { ... }

传递的类型参数保证E将扩展RealmObject。我想做这样的事情:

public void onSuccessfulResponse(Call<T> call, Response<T> response, int statusCode) { 
   /// some caching logic
   RealmResults<E> cachedData = realm.where( ???? ); 
}

这就是问题,我不能使用标准的Realm方法。有没有办法使用通用的RealmObject类检索数据?

1 个答案:

答案 0 :(得分:3)

我发现一个可行的解决方案到目前为止 -  在构造函数中传递类型类值并将其存储在回调实例中。

public class CachedApiCallback<E extends RealmObject, T extends List<E>> implements Callback<T> {

    protected boolean paging;
    protected IListenable<List<E>> listener;
    protected Class<E> entityType;

    public CachedApiCallback(Class<E> entityType){
        this.entityType = entityType;
    }

    public void onSuccessfulResponse(Call<T> call, Response<T> response, int statusCode) {
        // ....
        RealmResults<E> cachedData = realm.where(entityType).findAll();
        // ....
    }
}

可能有一个更清洁的解决方案,但这可以完成工作。