RxAndroid functn编译/lint错误

RxAndroid functn编译/lint错误,android,rx-java,rx-android,Android,Rx Java,Rx Android,我有一个表单,有14个字段,在启用提交按钮之前必须有效 我在每个字段上都有一个observable,我正在使用combineLatest()来确保它们同时都有效 我尝试过使用较少的参数,效果很好(当我使用Func3、Func4等时) combineLatest()的问题是,当您组合9个以上的可观察对象时,必须使用FuncN作为组合可观察对象。下面是一个代码示例: List <Observable<Boolean>> fieldObservables = new Array

我有一个表单,有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
            }
        });
List fieldobserves=new ArrayList();
fieldObservables.add(field1Observable);
fieldObservables.add(field2Observable);
FieldObservable.add(field3Observable);
FieldObservable.add(field4Observable);
FieldObservable.添加(Field5 Observable);
fieldObservables.add(Field6Observables);
fieldObservables.add(Field7Observables);
FieldObservable.add(field8Observable);
FieldObservable.添加(field9Observable);
FieldObservable.add(field10Observable);
FieldObservable.add(Field11可观察);
FieldObservable.添加(Field12 Observable);
FieldObservable.添加(Field13 Observable);
FieldObservable.添加(Field14 Observable);
订阅表单ReadySubscription=可观察
.CombineTest(现场可观测,
新函数(){
@凌驾
公共布尔调用(布尔…readyArgs){
for(布尔就绪:readyArgs){
如果(!准备就绪){
返回false;
}
}
返回true;
}
})
.订阅(新观察员){
@凌驾
未完成的公共无效(){
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
public void onNext(布尔格式有效){
//TODO:启用提交按钮
}
});
上述代码给出了FuncN的两个错误:

“匿名不是抽象的,不会覆盖FuncN中的抽象方法调用(对象…)”

“方法不会覆盖或实现其call()方法的超类型中的方法”

看来
FuncN
的call()方法需要的是对象列表,而不是布尔值。(我想知道这是否是一个bug。我很怀疑,因为Func2(作为一个例子)被定义为
Func2
,其中两个布尔值是参数,其中一个布尔值是call()方法的预期返回值。保持这种模式,您会期望FuncN的声明是
FuncN

是否有人成功地让FuncN工作,如果是,你是如何做到的?谢谢

变化

public Boolean调用(Boolean…readyArgs){


然后将参数强制转换为方法中的布尔值

是否尝试将
公共布尔调用(Boolean…readyArgs){
更改为
公共布尔调用(Object…readyArgs){
然后在方法内部将参数强制转换为布尔值?它可以编译!谢谢。它还没有完全工作,但这可能是一个逻辑错误。我会告诉你的。@GreybeardGeek它工作得很好。如果你想把它作为答案,我会接受的。我已经遇到了16个可组合的观测值的限制。不止这些原因设置RxAndroid生成的异常。若要解决此问题,可以在将观察值添加到组合之前组合观察值(使用CombineTest)。我已经测试了此功能,它可以正常工作。
FuncN
相当难看,没有通用参数。它只接受
R调用(Object…args)
,这很糟糕,因为你必须在事后施放它们。
public Boolean call(Object... readyArgs) {