Java 为什么此CompletionStage代码会导致编译错误?
我有两个班;说A和B;两者都返回CompletionStageJava 为什么此CompletionStage代码会导致编译错误?,java,compiler-errors,java-8,Java,Compiler Errors,Java 8,我有两个班;说A和B;两者都返回CompletionStage B类代码: class B { public CompletionStage<Optional<Map<String, Object>>> m1(SampleObject1 obj) { return CompletableFuture.supplyAsync(() -> dosomething(obj)) .thenApplyAsync(re
B类代码:
class B {
public CompletionStage<Optional<Map<String, Object>>> m1(SampleObject1 obj) {
return CompletableFuture.supplyAsync(() -> dosomething(obj))
.thenApplyAsync(results ->
Optional.ofNullable((results.length == 1) ? results : null)
);
}
}
class A {
public CompletionStage<Optional<SampleObject2>> m2(Optional<DynamicForm> dynamicForm) {
CompletionStage<DynamicForm> promiseOfFormData = CompletableFuture.supplyAsync(() -> dynamicForm.get());
CompletionStage<Optional<Map<String, Object>>> c = promiseOfFormData.thenApplyAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);
return something.....;
}
}
B类{
公共完成阶段m1(SampleObject1 obj){
返回CompletableFuture.supplyAsync(()->dosomething(obj))
.然后应用同步(结果->
可选.ofNullable((results.length==1)?结果:null)
);
}
}
A类代码:class B {
public CompletionStage<Optional<Map<String, Object>>> m1(SampleObject1 obj) {
return CompletableFuture.supplyAsync(() -> dosomething(obj))
.thenApplyAsync(results ->
Optional.ofNullable((results.length == 1) ? results : null)
);
}
}
class A {
public CompletionStage<Optional<SampleObject2>> m2(Optional<DynamicForm> dynamicForm) {
CompletionStage<DynamicForm> promiseOfFormData = CompletableFuture.supplyAsync(() -> dynamicForm.get());
CompletionStage<Optional<Map<String, Object>>> c = promiseOfFormData.thenApplyAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);
return something.....;
}
}
A类{
公共完工阶段m2(可选动态表单){
CompletionStage promiseOfFormData=CompletableFuture.SupplySync(()->dynamicForm.get());
CompletionStage c=对MDATA的承诺。然后应用同步(
data->b.m1(新的SampleObject1(data.get(“key1”)、data.get(“key2”))
);
归还某物。。。。。;
}
}
但是,它在运行时抛出以下错误:inference variable U has incompatible bounds
equality constraints: java.util.Optional<java.util.Map<java.lang.String,java.lang.Object>>
lower bounds: java.util.concurrent.CompletionStage<java.util.Optional<java.util.Map<java.lang.String,java.lang.Object>>>
推理变量U的边界不兼容
等式约束:java.util.Optional
下限:java.util.concurrent.CompletionStage
我做错了什么?您的退货类型有问题:
b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
正在从B
中的方法签名返回一个CompletionStage
,因此
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
属于功能类型
和以下类型
promiseOfFormData.thenApplyAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);
因此属于类型CompletionStage
,与目标类型CompletionStage
不兼容。您的错误在于计算目标类型的边界
您应该改为使用,它是为同样返回CompletionStage
的函数设计的:
CompletionStage<Optional<Map<String, Object>>> c = promiseOfFormData.thenComposeAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);
CompletionStage c=promiseoff for mdata.thenComposeSync(
data->b.m1(新的SampleObject1(data.get(“key1”)、data.get(“key2”))
);
或者,您可以重写
m1
以不创建CompletionStage
,而只是执行计算,然后像以前一样在然后在applyasync
调用中使用它。根据您的建议编辑了类a。请看A类代码。但错误仍然存在。你能帮忙吗me@AbhinabKanrar我在我的答案中添加了一个基于原始代码的建议解决方案。但是,你不应该用后续问题或答案来修改你的问题。您还应该注意您的代码格式,因为人们不会阅读格式不好的问题(在您修改之前,我已经编辑了格式)。非常感谢。使用复合同步。立即工作:)您正在尝试返回一个CompletableFuture
,其中声明的返回类型为CompletionStage
。当然,这是行不通的。@Abhinab,我冒昧地回滚了您上一次的编辑,因为接受的答案比您尝试修复的答案更符合原始问题。“我希望你没事儿。”迪迪埃,当然没问题