当我编写不同的 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/