适合在rxjava中使用Func0和Action1有什么区别
我有以下代码段,其中使用了适合在rxjava中使用Func0和Action1有什么区别,java,rx-java,Java,Rx Java,我有以下代码段,其中使用了Func0和Action1 Observable.defer(new Func0<Observable<String>>() { @Override public Observable<String> call() { try { return Observable.just(Database.readValue()); } catc
Func0
和Action1
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);
}
}
}
Observable.defer(新函数0(){
@凌驾
公共可观测呼叫(){
试一试{
返回Observable.just(Database.readValue());
}
捕获(IOE异常){
返回可观测误差(e);
}
})
.订阅(新操作1(){
@凌驾
公共无效调用(字符串结果){
resultTextView.setText(结果);
}
}
}
但我只是想知道它们之间有什么区别。我知道数字意味着参数的数量,即Func0
没有参数,而Action1
有1个参数
但是,您如何知道使用哪一个呢?我应该使用Action
还是Func
调用方法的目的是什么
非常感谢您的建议,请查看它们的定义:
接口函数0{
R调用();
}
接口操作1{
无效通知(T);
}
Func0
提供数据,而Action1
消耗数据。这是双重功能,你不能把两者弄错。简短的回答;你会根据你调用的方法知道。
首先,让我们看看您尝试使用的两种方法:
返回一个Observable,调用Observable工厂为订阅的每个新观察者创建一个Observable。也就是说,对于每个订阅者,订阅者观察到的实际Observable由工厂函数确定
参数:
observableFactory可观察工厂函数,为订阅结果可观察工厂的每个观察者调用
返回:
一种可观察对象,其观察者的订阅触发对给定可观察工厂函数的调用
public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory)...
在subscribe
的情况下,您提供了一种从可观察对象接受值的方法。表示这一点的最佳界面是(其中T1
是字符串
)
公共接口操作1扩展了操作{
公开作废通知(T1);
}
当您编写newaction1(){…}
或newfunc0(){…}
时,您正在创建一个称为的。您正在定义调用方法Action1.call
或Func0.call
时发生的情况
你的问题:
你怎么知道该用哪一个?我应该用Action还是Func
这取决于应用程序的需要。通读文档,看看哪种方法最适合您的需要。根据您选择的方法,您必须实现它在方法签名中指定的接口
调用方法的目的是什么
这是您正在使用的高阶函数所需的策略/接口中的方法名称。通过查看接口定义,您将知道该名称。每个接口都声明了一个名为call
的方法。其中一个可以很容易地命名为foo
,另一个可以命名为bar
public final Subscription subscribe(final Action1<? super T> onNext)...
public interface Func0<R> extends Function, Callable<R> {
@Override
public R call();
}
public interface Action1<T1> extends Action {
public void call(T1 t1);
}