Ich habe zwei Klassen, sagen wir A und B; beide geben CompletionStage zurück. B-Code
Klasse:
Warum verursacht dieser CompletionStage-Code einen Kompilierungsfehler?
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)
);
}
}
Klasse A Code:
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.....;
}
}
aber es wirft zur Laufzeit folgende Fehlermeldung:
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>>>
Was bin ich hier falsch machen?
Sie versuchen, eine 'CompleableFuture>>' zurückzugeben, bei der der deklarierte Rückgabetyp 'CompletionStage >' lautet. Das funktioniert natürlich nicht. –
Holger
@Abhinab, ich habe mir die Freiheit genommen, deine letzte Bearbeitung rückgängig zu machen, da die akzeptierte Antwort besser mit der ursprünglichen Frage übereinstimmt als deine vorläufige Lösung. Ich hoffe es geht dir gut. –
@Didier, sicher kein Problem –