Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 为什么此CompletionStage代码会导致编译错误?_Java_Compiler Errors_Java 8 - Fatal编程技术网

Java 为什么此CompletionStage代码会导致编译错误?

Java 为什么此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

我有两个班;说A和B;两者都返回CompletionStage
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,我冒昧地回滚了您上一次的编辑,因为接受的答案比您尝试修复的答案更符合原始问题。“我希望你没事儿。”迪迪埃,当然没问题