RxAndroid FuncN编译/ lint错误

时间:2015-11-10 01:07:32

标签: android rx-java rx-android

我有一个包含14个字段的表单,在启用提交按钮之前需要有效。

我在每个字段上都有一个observable,我使用combineLatest()来确保它们同时有效。

我用较少数量的参数尝试过它,它运行良好(当我使用Func3,Func4等时)。

combineLatest()的问题在于,当您组合9个以上的可观察对象时,必须使用FuncN作为组合可观察对象。这是一个代码示例:

List <Observable<Boolean>> fieldObservables = new ArrayList<Observable<Boolean>>();

fieldObservables.add(field1Observable);
fieldObservables.add(field2Observable);
fieldObservables.add(field3Observable);
fieldObservables.add(field4Observable);
fieldObservables.add(field5Observable);
fieldObservables.add(field6Observable);
fieldObservables.add(field7Observable);
fieldObservables.add(field8Observable);
fieldObservables.add(field9Observable);
fieldObservables.add(field10Observable);
fieldObservables.add(field11Observable);
fieldObservables.add(field12Observable);
fieldObservables.add(field13Observable);
fieldObservables.add(field14Observable);

Subscription formReadySubscription = Observable
        .combineLatest(fieldObservables,
                new FuncN<Boolean>() {
                    @Override
                    public Boolean call(Boolean... readyArgs) {
                        for (Boolean ready : readyArgs) {
                            if (!ready) {
                                return false;
                            }
                        }
                        return true;
                    }
                })

        .subscribe(new Observer<Boolean>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Boolean formValid) {
                // TODO: enable submit button
            }
        });

上面的代码在FuncN上给出了两个错误:

"Anonymous is not abstract and does not override abstract method call(Object...) in FuncN"
"Method does not override or implement a method from a supertype"的call()方法。

似乎FuncN<Boolean>的call()方法需要一个Object列表而不是Boolean。 (我想知道这是不是一个错误。我怀疑是因为Func2(作为例子)定义为Func2<Boolean, Boolean, Boolean>,其中两个布尔值是参数,其中一个布尔值是期望从call()方法返回。保持这种模式,你会期望FuncN的声明为FuncN<Boolean,Boolean>。)

有没有人成功让FuncN工作,如果有,你是怎么做到的?谢谢!

1 个答案:

答案 0 :(得分:1)

更改

public Boolean call(Boolean... readyArgs) {

public Boolean call(Object... readyArgs) { 

然后将参数转换为方法

中的布尔值