Java 子类completableFuture和completableFuture.Allof最终不工作
我正在尝试创建CompletableFuture的一个子类,所有其他方面都工作得很好,但当我使用CompletableFuture.allOf时,它永远不会结束 “test2 all of handled”从来没有打印过——而如果我用通用CompletableFuture替换所有TimedCF,它就可以正常工作了 谢谢你的帮助 代码示例:Java 子类completableFuture和completableFuture.Allof最终不工作,java,subclass,completable-future,Java,Subclass,Completable Future,我正在尝试创建CompletableFuture的一个子类,所有其他方面都工作得很好,但当我使用CompletableFuture.allOf时,它永远不会结束 “test2 all of handled”从来没有打印过——而如果我用通用CompletableFuture替换所有TimedCF,它就可以正常工作了 谢谢你的帮助 代码示例: class TimedCF<T> extends CompletableFuture<T> { CompletableFuture&l
class TimedCF<T> extends CompletableFuture<T> {
CompletableFuture<T> orig = null;
public TimedCF(CompletableFuture<T> ct) {
this.orig = ct;
}
... all other public methods delegated by intellij auto gen
... all static methods proxy to CompletableFuture
}
TimedCF<String> cf1 = new TimedCF(CompletableFuture.completedFuture("string 1"));
TimedCF<String> cf2 = new TimedCF(CompletableFuture.completedFuture("string 2"));
CompletableFuture.anyOf(cf1, cf2)
.handle( (ignore, ex) -> {
System.out.println("test2 all of handled");
return null;
} );
class TimedCF扩展了CompletableFuture{
CompletableFuture-orig=null;
公共时间DCF(可完成未来ct){
this.orig=ct;
}
…intellij auto gen委托的所有其他公共方法
…所有静态方法都是CompletableFuture的代理
}
TimedCF cf1=新的TimedCF(CompletableFuture.completedFuture(“字符串1”));
TimedCF cf2=新的TimedCF(CompletableFuture.completedFuture(“字符串2”));
CompletableFuture.anyOf(cf1、cf2)
.handle((忽略,例如)->{
System.out.println(“test2全部处理”);
返回null;
} );
假定cf1
或cf2
均未完成,因此anyOf
不会触发。传递给他们的CompletableFuture
已完成这一事实没有任何区别。allOf
直接处理TimedCF
的状态字段,而不是通过您委托给包装的未来的方法调用。它没有结束,因为包装器还没有完成。如果最后你把所有的事情都委托给包装好的未来,你为什么要扩展CompletableFuture
?为什么不依赖父类实现,或者实现CompletionStage
?对我来说,这感觉像是一场灾难。你的评论很有道理。虽然只涉及方法调用。谢谢