В Java 8 лучше ли интерфейсу или абстрактному классу определять API, возвращающие CompletableFuture
вместо возврата Future
? Учитывая it is ugly converting Future
to CompletableFuture
и тот факт, что CompletableFuture
предоставит абоненту большую гибкость в использовании функционального стиля напрямую, что может быть хорошей причиной для API, который просто возвращает Future
?Должен ли я возвращать CompletableFuture или Future при определении API?
7
A
ответ
3
Мои 2 карат:
- по возвращению в будущем, вы сохраняете свои варианты открытыми и могут возвращать будущее, или CompletableFuture - это не имеет никакого значения с точки зрения абонента.
- , возвращая CompletableFuture, вы предоставляете абоненту больше опций (они получают больше методов), но вы также обязуетесь вернуть этот тип будущего - если через два года вы поймете, что возвращение BetterFuture будет иметь больше смысла, вам придется измените API, что не очень хорошо.
Таким образом, вы должны, вероятно, оценить вероятность того, что вам захочется вернуть что-то другое, чем CompletableFuture в будущем (haha), и принять соответствующее решение.
1
Мысль я хотел бы вернуться к этому и обеспечить некоторые обновления на своих окончательных решениях:
Для моего собственного кода/дизайн, я пошел с использованием CompletableFuture
в качестве возвращаемого типа, потому что
- это a
protected abstract
метод внутренней части, который я хочу сделать расширяемым; - Мне не нужен интерфейс для определения привязки;
- Основная цель этого типа возврата - это будущее (для async IO), я лично считаю, что функциональный интерфейс API, предоставляемый
CompletableFuture
, является дополнительным преимуществом/напоминанием/поощрением использования функционального стиля для будущих разработчиков.
С этим сказанным, я бы определенно использовать интерфейс CompletableStage
в качестве возвращаемого типа, если бы я проектировал публичного API, потому что:
- , что @assylias и сказал @Holger о интерфейсной VS. реализации и цепной способности
- и тот факт, что
CompletableStage
имеет способCompletableFuture<T> toCompletableFuture()
.
Смежные вопросы
- 1. Должен ли API возвращаться CompletionStage или CompletableFuture
- 2. Выбор API, должен ли я возвращать XPathNavigator или XmlDocument
- 3. Допустимо ли возвращать unmodifiableList или я должен возвращать массив?
- 4. Должен ли я возвращать IEnumerable или IList?
- 5. Должен ли API возвращать данные, которые были созданы или обновлены?
- 6. Должен ли я использовать Request.UrlReferrer при определении рефералов
- 7. при определении углового модуля - должен ли я обернуть функцию самоиспускания?
- 8. Должен ли я выводить на PHP при определении моих варов?
- 9. Должен ли я возвращать null или выдавать исключение?
- 10. Должен ли я использовать shared_ptr или возвращать unique_ptr.get()?
- 11. Должен ли я возвращать нулевой или пустой список?
- 12. ошибки говоря "CompletableFuture (Object) имеет частный доступ в CompletableFuture" при реализации CompletableFuture
- 13. При тестировании API. Должен ли я проверить проверку методов API?
- 14. Должен ли я возвращать код статуса или бросить исключение в .Net Web Api 2
- 15. Должен ли я использовать Schema.Types.ObjectId или Schema.ObjectId При определении Mongoose схемы
- 16. Должен ли Угловой сервис возвращать обработанные данные или необработанные данные?
- 17. Почему я должен «возвращать» функцию?
- 18. Должен ли RESTful API возвращать 404 для массивов объектов?
- 19. Как вызвать CompletableFuture callback при распространении результата или ошибки?
- 20. API Google Адреса должен возвращать только адрес
- 21. HttpUnathorized должен возвращать код статуса при вызове из API
- 22. Должен ли я публиковать формат файла или API?
- 23. Почему я должен вызвать конструктор суперкласса при определении подкласса?
- 24. Отдельная обработка исключений из CompletableFuture
- 25. Должен ли я по умолчанию jsonb на «{}» или {} в миграции
- 26. Отмена CompletableFuture контролируется ExecutorService
- 27. Завершение Future, thenCompose метод
- 28. Должен ли я использовать BreezeController?
- 29. NDEBUG не должен определяться при определении _DEBUG
- 30. Должен ли я закрывать cURL или нет?
Я только что задал этот вопрос 2 минуты назад и еще 1 закрыл голосование? Что не так с просьбой о фактических вариантах использования для программирования/выбора дизайна? – derrdji
Я бы предположил, что он немного широк. Может быть, добавить пример использования? –
Вариант использования Я разрабатываю асинхронный API, который обрабатывает файлы, мои прошлые знания говорят мне возвращать Будущее, но после изучения другого вопроса, который я связал, я чувствую, что Java8 говорит мне возвращать CompletableFuture . Я не уверен и нуждаюсь в помощи. –
derrdji