gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:55:09 24 4
gpt4 key购买 nike

我有两个类(class);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)
);
}
}

A 类代码:

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.....;
}
}

但是,它在运行时抛出以下错误:

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>>>

我在这里做错了什么?

最佳答案

您的返回类型有问题:

b.m1(new SampleObject1(data.get("key1"), data.get("key2")))

正在返回CompletionStage<Optional<Map<String, Object>>>正如 B 中的方法签名所示,所以

data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))

类型为Function<DynamicForm,CompletionStage<Optional<Map<String, Object>>>>以及以下内容

promiseOfFormData.thenApplyAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);

因此属于 CompletionStage<CompletionStage<Optional<Map<String, Object>>>> 类型这与目标类型 CompletionStage<Optional<Map<String, Object>>> 不兼容。您遇到的错误是在计算目标类型的边界时出现的。

你应该做的可能是使用 CompletionStage#thenComposeAsync ,它是为也返回 CompletionStage 的函数设计的。 :

CompletionStage<Optional<Map<String, Object>>> c = promiseOfFormData.thenComposeAsync(
data -> b.m1(new SampleObject1(data.get("key1"), data.get("key2")))
);

或者,您可以重写 m1不创建 CompletionStage但只需执行计算,然后在 thenApplyAsync 中使用它像之前一样进行调用。

关于java - 为什么此 CompletionStage 代码会导致编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37463494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com