Mar*_*YOT 2 java completable-future
抱歉这个糟糕的头衔,如果有人有更好的主意,我愿意接受建议.
我正在玩这个CompletableFuture,我偶然发现了一些奇怪的东西.
假设你有两个类:A和B哪里B extends A,B也是一个子类型A.
现在,让我们宣布一个CompletableFuture:
CompletableFuture<A> promiseofA = CompletableFuture.supplyAsync(() -> new B());
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为B它的子类型A符合声明CompletableFuture.现在,如果我想添加一个exceptionally步骤,那么我有一个编译异常:
CompletableFuture<A> promiseOfA = CompletableFuture.supplyAsync(() -> new B())
.exceptionally(ex -> new B());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Java正在抱怨,说:
Compilation error[ java.util.concurrent.CompletableFuture<B> cannot be converted to java.util.concurrent.CompletableFuture<A>]
Run Code Online (Sandbox Code Playgroud)
为什么没有这个excepionally步骤而没有它呢?
添加时它不起作用,exceptionally因为它完全依赖于其输入的源未来.
这意味着,特别是它看到了源的未来CompletableFuture<B>,那么它返回的类型必须是CompletableFuture<B>.
如果指定源实际上是CompletableFuture<A>(CompletableFuture.<A>supplyAsync(...))那么它将再次正确编译.这是Java中泛型类型推导的问题.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |