Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子类completableFuture和completableFuture.Allof最终不工作_Java_Subclass_Completable Future - Fatal编程技术网

Java 子类completableFuture和completableFuture.Allof最终不工作

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

我正在尝试创建CompletableFuture的一个子类,所有其他方面都工作得很好,但当我使用CompletableFuture.allOf时,它永远不会结束

“test2 all of handled”从来没有打印过——而如果我用通用CompletableFuture替换所有TimedCF,它就可以正常工作了

谢谢你的帮助

代码示例:

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
?对我来说,这感觉像是一场灾难。你的评论很有道理。虽然只涉及方法调用。谢谢