【问题标题】:How to return Observable with specific type?如何返回特定类型的 Observable?
【发布时间】:2017-12-12 21:40:37
【问题描述】:

我需要返回 Observable 指定的泛型类型。但是在 zip 运算符之后,我只得到 Observable,没有任何类型。

如何将通常的 Observable 转换为 Observable<T> ?也许有一些 rx 运算符来解决这个问题?

代码示例:

public Observable<Schedule> updateSchedules(final List<ScheduleInfo> schedulesInfo) {
    List<Observable<List<ScheduleItem>>> observables = makeScheduleTasks(schedulesInfo);
    Observable observable = Observable.zip(observables, objects -> getSchedules(schedulesInfo, objects));
    return (Observable<Schedule>)observable; //How to cast?
}


private List<Schedule> getSchedules(List<ScheduleInfo> schedulesInfo, Object[] objects) {
        if(objects.length == schedulesInfo.size()){
            List<Schedule> schedules = new ArrayList<>(schedulesInfo.size());
            for (int i = 0; i < schedulesInfo.size(); i++) {
                Object object = objects[i];
                schedules.add(new Schedule(schedulesInfo.get(i), (List<ScheduleItem>) object));
            }
            return schedules;
        }
        return null;
    }

【问题讨论】:

  • 您在observable 的声明中缺少类型信息。当你提供它时会发生什么?
  • 这里引用的两种方法的类型是什么?
  • @BobDalgleish 在表达式“Observable.zip”中根本找不到 zip 运算符
  • @OliverCharlesworth 抱歉,添加以下方法 getSchedules

标签: java android system.reactive rx-java2


【解决方案1】:

你需要在编译器可以使用的地方提供类型信息:

public Observable<Schedule> updateSchedules(final List<ScheduleInfo> schedulesInfo) {
    List<Observable<List<ScheduleItem>>> observables = makeScheduleTasks(schedulesInfo);
    Observable<Schedule> observable = Observable.zip(observables, objects -> getSchedules(schedulesInfo, objects));
    return observable;
}

应该可以正常工作,只要getSchedules() 返回Schedule

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多