适合在rxjava中使用Func0和Action1有什么区别

ant2009:

我在Func0Action1使用以下代码片段

Observable.defer(new Func0<Observable<String>>() {
    @Override
    public Observable<String> call() {
        try {
            return Observable.just(Database.readValue());       
        }
        catch(IOException e) {
            return Observable.error(e);     
        }   
    })
    .subscribe(new Action1<String>() {
        @Override
        public void call(String result) {
            resultTextView.setText(result);     
        }   
    }
}

但是我只是想知道它们之间有什么区别。我知道数字表示参数的数量,即Func0没有参数且Action1有1个参数。

但是,您怎么知道要使用哪个呢?我应该使用Action还是Func

call方法的目的是什么?

非常感谢您的任何建议,

薄片:

简短的答案;您将基于所调用的方法知道。

首先,让我们看一下您要使用的两种方法:

Observable.defer返回一个Observable,该Observable调用Observable工厂为每个订阅的新Observer创建一个Observable。即,对于每个订户,订户观察的实际可观测值由工厂功能确定。

参数:observableFactory Observable工厂函数,可为预订结果Observable的每个Observer调用

返回:一个Observable,其Observers的预订触发对给定Observable工厂函数的调用

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory)...

Observable.subscribe订阅Observable,并提供回调以处理其发出的项目。

参数:onNext您设计为接受来自Observable的发射的Action1

返回:订阅参考,观察者可以使用它来在Observable完成发送项目之前停止接收它们

public final Subscription subscribe(final Action1<? super T> onNext)...

您在上面看到的是两个高阶函数策略模式实现的示例,它们各自接受不同的策略格式。

对于defer而言,提供了一种Observable无需提供初始输入即可创建新内容的方法一个Func0要求,因为它有格式(这里RObservable<String>):

public interface Func0<R> extends Function, Callable<R> {
    @Override
    public R call();
}

如果subscribe您提供一种从可观察对象接受值的方法。代表这一点的最佳接口是Action1(其中T1String

public interface Action1<T1> extends Action {
    public void call(T1 t1);
}

在编写new Action1<>() {...}new Func0<>() {...}创建匿名类时您在适当的位置定义了调用方法Action1.call方法时会发生什么Func0.call


你的问题:

您怎么知道要使用哪个?我应该使用Action还是Func。

这取决于您的应用程序的需求。通读文档,看看哪种方法最适合您的需求。根据您选择的方法,您必须实现它在方法签名中指定的接口。

调用方法的目的是什么?

这是所使用的高阶函数所需的策略/界面中方法的名称。通过查看接口定义,您将知道名称。每个接口声明一个名为的方法只是偶然call一个很容易被冠名foo,另一个很容易被冠名bar

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

> 0和> = 1有什么区别?

EventBus和RxJava有什么区别?

“(type func())”和“ type func()”有什么区别

类中的func()=> {}和func =()=> {}有什么区别?

TkInter中的“ func”和“ func()”有什么区别?

Go中[0]和[:1]有什么区别?

[1] int {}和[] int {0}有什么区别

(size_t)-1和〜0有什么区别?

在Slick中使用DatabaseConfig和Database有什么区别?

在SQL中使用In和join有什么区别?

在JavaScript中使用keyup和keydown有什么区别?

在Django中使用TemplateView和ListView有什么区别?

在MIPS中使用NOP和停顿有什么区别

在 Typescript 中使用 `:Interface` 和 `as Interface` 有什么区别?

在Kotlin中使用@Annotation和[Annotation]有什么区别?

在“if”语句中使用时,“in”和“is”有什么区别?

a + = 1和a = + 1 ..有什么区别?

类型“ string”和“ func()string”之间有什么区别?

* = 1和a = + a有什么区别?

Android RxJava 2:fromCallable和Just有什么区别?

RxJava-delay和delaySubscription有什么区别?

RxJava中的concatMap和flatMap有什么区别

RxJava中的flatmap和switchmap有什么区别?

RxJava中的Observable,Completable和Single有什么区别

rxjava2和rxkotlin有什么区别?

RxJava启动和创建之间有什么区别?

在Excel中使用True,False,1,0作为VLOOKUP的最后一个值有什么区别?

fillRect(0,0,0,1)和clearRect()有什么区别

linux globlob中的[01],[0-1]和[0,1]有什么区别?