Callable против поставщика интерфейса в Java - PullRequest
0 голосов
/ 07 сентября 2018

Функциональные интерфейсы Callable и Supplier в пакетах java.util.concurrent и java.util.function соответственно имеют следующую подпись -

public interface Callable<V> {
    V call() throws Exception;
}

public interface Supplier<T> {
    T get();
}

Существуют ли конкретные случаи использования, когда каждый из них подходит больше, чем другой?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Помимо очевидного, Callable выбрасывает исключение, разница семантическая.У них разные имена, потому что они представляют разные вещи.Цель состоит в том, чтобы сделать код проще для понимания.Когда вы используете Callable, ваш выбор интерфейса подразумевает, что объект будет выполняться другим потоком.Когда вы используете поставщика, вы подразумеваете, что это просто объект, который передает данные в другой компонент.

0 голосов
/ 07 сентября 2018

Их различие в использовании видно из соответствующей документации:

Callable:

Задача, которая возвращает результат, и может выдать исключение . Implementors определить единственный метод без аргументов, называемый call.

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

Supplier

Представляет поставщика результатов.

Нет требования, чтобы каждый новый или отдельный результат возвращался время, когда вызывается поставщик.

Это означает, что вызывающий Callable.call ожидает, что будет сгенерировано исключение, и обработает исключение соответствующим образом. Это полезно для таких задач, как чтение и запись в файлы, где может быть выброшено множество типов IOException. Callable также предназначен для работы в другом потоке.

Supplier с другой стороны, очень общий. Он просто «предоставляет значение» и все.

То есть Callable более специализирован, чем Supplier. Если вы не имеете дело с другим потоком или ваша задача вряд ли выдаст исключение, рекомендуется Supplier.

...