Использование Callable вместо поставщика или наоборот - PullRequest
0 голосов
/ 11 декабря 2018

Я наткнулся на код, который использовал Callable вместо Supplier.Я не видел каких-либо потоков, порождающих использование Callable.Но можно ли использовать Callable вместо Supplier ?.

Один из разработчиков, с которым я работаю, заявил, что он выполняет ту же работу.Судя по документам, он не хочет, но хотел бы узнать мнение экспертов здесь.

  Callable<Optional<NodePermissionResponse>> successHandler = () -> {
        NodePermissionResponse restResponse = response.readEntity(NodePermissionResponse.class);
        return Optional.of(restResponse);
    };

    Callable<Optional<NodePermissionResponse>> errorHandler = () -> {
        ApplicationResponse appResponse = response.readEntity(ApplicationResponse.class);
        if(appResponse.getError().getStatusCode() == NOT_FOUND_STATUS_CODE) {             
            return Optional.empty();
        }
        log.error("Fetching entitlements for group failed", appResponse.getError());                                            
        throw new ApplicationAccessException(appResponse.getError());
    };

 return processResponse(
            successHandler, errorHandler, response);
}

Метод обработки ответа

  public static <T> T processResponse(Callable<T> successfulResponseHandler,
                             Callable<T> unsuccesfulResponseHandler,
                             Response response) {
   //do the job here
}

1 Ответ

0 голосов
/ 11 декабря 2018

Я не видел ни одной темы, возникающей при использовании Callable.Но можно ли использовать Callable вместо поставщика.

Как уже упоминалось в комментариях, и Callable, и Supplier являются интерфейсами, которые имеют один и тот же дескриптор функции, т.е. их SAM (Single Abstract Method)одинаковы в своих подписях.

Разница лишь в том, что Callable#call может генерировать проверенные исключения, с другой стороны, Supplier#get нет.

Это означает, что для вашего случая использования использование любого из них вполне приемлемо, хотя, как уже упоминалось в , этот ответ

Хотя в данном конкретном случае достаточно обоих интерфейсов, онипредназначен для разных целей, например, Callable - «Задача, которая возвращает результат», а Поставщик - «поставщик результатов».Последний является более «общим» в отличие от первого.

Итак, вывод заключается в том, чтобы выбрать тот, который больше всего подходит для вашего конкретного сценария.

...