关于Guava ListenableFuture代码有效性与回调执行逻辑的问询
代码有效性与回调执行分析
一、代码存在语法错误
这段代码无法正常编译,核心问题有两处:
FutureCallback的匿名内部类中,onSuccess和onFailure都是void类型方法,不能包含return future;语句,这行属于非法返回语句,会触发编译报错。Futures.addCallback调用末尾缺少闭合的括号和分号,导致语法不完整。
修正后的合法代码示例:
//public void doSomething(x,x){} // doSomething(a,b)... ListenableFuture<Void> future = Futures.immediateFuture(null); Futures.addCallback(future, new FutureCallback<Void>(){ public void onSuccess(@Nullable Void aVoid){ //do something } public void onFailure(@Nonnull Throwable throwable){ //do something } });
二、回调执行逻辑
使用Futures.immediateFuture(null)创建的ListenableFuture是已成功完成的实例,传入的null就是它的成功结果,因此:
- 回调的
onSuccess方法一定会被执行,参数aVoid即为传入的null。 onFailure方法永远不会被触发,因为这个Future从创建起就处于成功完成状态,不存在异常抛出的场景。
内容的提问来源于stack exchange,提问作者Ray Knight
相关产品推荐
相关产品推荐

