ash*_*hes 11 java android reactive-programming rx-java
Observable.fromCallable()非常适合将单个函数转换为Observable.但是,如何处理函数可能抛出的已检查异常?
我见过的大多数例子都使用lambdas和"just work".但是如果没有lambda,你会怎么做?例如,请参阅以下这篇精彩文章中的引用:
Observable.fromCallable(() -> downloadFileFromNetwork());
Run Code Online (Sandbox Code Playgroud)
现在这是一个单线程!它处理已检查的异常,没有更奇怪的Observable.just()和Observable.error()这样简单的事情就像推迟代码执行一样!
当我尝试在没有lambda表达式的情况下实现上面的Observable时,基于我见过的其他示例,以及Android Studio如何自动完成,我得到以下结果:
Observable.fromCallable(new Func0<File>() {
@Override
public File call() {
return downloadFileFromNetwork();
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果downloadFileFromNetwork()抛出一个已检查的异常,我必须尝试捕获它并将其包装在一个RuntimeException.必须有更好的方法!上面的lambda如何支持这个?!?!
ash*_*hes 23
而不是使用Func0with Observable.fromCallable(),使用Callable.例如:
Observable.fromCallable(new Callable<File>() {
@Override
public File call() throws Exception {
return downloadFileFromNetwork();
}
}
Run Code Online (Sandbox Code Playgroud)
由于Callable方法call()抛出Exception,你不必将你的函数包装在try-catch中!这必须是lambda在引擎盖下使用的内容.