java - RxJava : onErrorReturn cast problem when it returns a Set

标签 java rx-java2

当我编写不同的 RxJava 运算符时,我遇到了转换问题,

这是我的方法:

public Single<Set<User>> doWork() {
  return calculate() //
    .map(...) //
    .collect(HashSet<User>::new, Set::add) //
    .onErrorReturn(err -> {

      return new HashSet<User>();
    }).cast(Set.class);
}

这段代码实际上可以在 Eclipse 中编译并运行良好,但是当使用 Maven 构建时,会出现以下编译错误:

Compilation failure incompatible types: cannot infer type-variable(s) U
[ERROR]     (argument mismatch; java.lang.Class<java.util.Set> cannot be converted to java.lang.Class<? extends java.util.Set<com.util.user.User>>

我把.cast(Set.class)因为否则 Eclipse 将无法编译它。

我似乎无法满足编译要求,所以我可能会返回 Set<User>正确(如果我删除最后一个 onErrorReturn 调用,则它可以正常编译)。

知道如何正确转换吗?

最佳答案

解决方案是在链的末尾添加另一个 map 调用,而不是 cast

public Single<Set<User>> doWork() {
  return calculate() //
  .map(...) //
  .collect(HashSet<User>::new, Set::add) //
  .onErrorReturn(err -> {

  return new HashSet<User>();
 }).map(user -> user);
}

希望对大家有帮助...

关于java - RxJava : onErrorReturn cast problem when it returns a Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57826412/

相关文章:

java - Lottie - setProgress 无法正常工作

java - 如何防止 Apache Tomcat 中的 PemGen 空间错误

android - RxJava 2 : Resubscribe (or Cancel and subscribe again) to second infinite observable in chain

java - 如何转换为 Rx java Observable

java - 当 REST API 在 Retrofit2 RxJava 中返回 401 时刷新访问 token

android - 如何使用 RxJava2 创建 2 个或两个并行网络请求?

java - 为什么servlet中的数据没有插入到sql数据库中?

java - HttpUnit 无法使用 websphere 8.5.5 保留 cookie

java - 如何仅使用 websockets 将 java 客户端连接到 SignalR Hub?

java - 使用改造和 RXJava 2 的多个 API 调用