如何使用带有已检查异常的Observable.fromCallable()?

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在引擎盖下使用的内容.