Прежде всего, очевидно, что я плохо понимаю thenApply
, и поэтому я прихожу с ошибкой компилятора, но я попытался выполнить поиск и не смог.
Вотмой простой код:
import java.util.concurrent.CompletionStage;
public class Main5 {
public static void main(String[] args) {
}
static class Game {
public void doIt(int id) {
CompletionStage<Player> player = getPlayer(id).thenApplyAsync(p -> {
modifyPlayer(p.getId());
return getPlayer(p.getId());
});
}
private CompletionStage<Player> getPlayer(int id) {
//do http request to get the player info
}
private CompletionStage<Void> modifyPlayer(int id) {
//do http request to modify player's info
}
}
}
В thenApplySync
я получаю эту ошибку компилятора:
incompatible types: inference variable U has incompatible bounds
equality constraints: com.testapp.Player
lower bounds: java.util.concurrent.CompletionStage<com.testapp.Player>
Метод getPlayer
уже возвращает этап завершения, так что с этим не так? ?
Я знаю, что
, если я сделаю:
return getPlayer(p.getId()).toCompletableFuture().get();
, это сработает, но я не понимаю, почему. По моему мнению, я должен вернуть стадию завершения, а не объект.
Помощь приветствуется.