Вывод типа в Java8 и Vertx - PullRequest
       10

Вывод типа в Java8 и Vertx

0 голосов
/ 01 марта 2019

Согласно документации, executeBlocking метод интерфейса Vertx имеет следующую подпись:

<T> void executeBlocking(Handler<Future<T>> blockingCodeHandler, boolean ordered, Handler<AsyncResult<T>> resultHandler)

Вопрос в том, почему (с формальной точки зрения) следование делает Java неспособным выводить универсальный тип для Future<T> (выводится Future<Object>):

    vertx.executeBlocking((deploymentFuture) -> {
        this.deploy();
        deploymentFuture.complete(new Boolean(true));
    }, (asyncResult) -> {
        start.complete();
    });

Даже если deploymentFuture явно присвоено Boolean.Только этот явный вызов дает Java представление о Future<Boolean>:

    vertx.<Boolean>executeBlocking((deploymentFuture) -> {
        this.deploy();
        deploymentFuture.complete(new Boolean(true));
    }, (asyncResult) -> {
        start.complete();
    });

Почему так сложно выводить типы в таком случае использования?Это потому, что неизменность типа (аналогично ArrayList<Integer> против ArrayList<Number>).

В основном без явного типа вызова я выброшен с

No instances of type variable T exist so that Future<T> conforms to Future<Object>

...