在rxjava中使用泛型循环条件时出现歧义错误



我不能在rxjava中使用takeUntil,因为我收到这个错误:

takeUntil(Predicate<? super T>) is ambiguous for the type (Flowable<T>)

我的代码是这样的:
public class Step {
private Integer actualStep;
private Integer nextStep;
//getters and setters
}
public Interface<T> BusinessStep {
Single<T> execute(T data);
}
public ComposedStep<T extends Step> implements BusinessStep<T> {
private Map<Integer,BusinessStep<T>> steps = new HashMap<>();

public void addStep(final Integer priority,
final BusinessStep<T> businessStepValidator) {
if (Objects.isNull(priority) || Objects.isNull(businessStepValidator)) {
return;
}
validations.put(priority, businessStepValidator);
}

@override
public Single<T> stepValidator(final T data) {
return Single.just(data)
.flatMap(x -> {
Optional<WrapperBusinessStepValidator<T>> oBusinessStep = 
Optional.ofNullable(validations
.get(x.getNextStep()));
if(oBusinessStep.isPresent()) {
return oBusinessStep.get().stepValidator(x);
} else {
return Single.just(x);
}
})
.repeat()
.takeUntil(x -> x.getNextStep().equals(Integer.zero))
.lastElement()
.toSingle()
;

}
}

steps中有一个映射,与BusinessStep的实现一起接收Step的子节点并更改nextStep。我需要创建一个循环,以便在nextStep不同于条件时执行几个BusinessStep。

问题是代码无法编译,因为我在文本的第一部分提到的错误。

编译器不知道你是否需要takeUntil(Predicate<? super T>)takeUntil(Publisher<U>),因为从技术上讲,lambda函数与两者都匹配。直接显式强制转换告诉编译器你想要哪个:

.takeUntil((Predicate<? super T>) x -> x.getNextStep().equals(Integer.zero))

即使这样也会消除歧义(尽管我不是100%确定为什么,因为equals已经返回了boolean):

.takeUntil(x -> (boolean) x.getNextStep().equals(Integer.zero))

最新更新