Универсальная монада XResult для Java

Для функционального программирования в Java достаточно одной монады XResult<T>, заменяющей Optional, Result и Either. Эта монада обрабатывает различные типы отказов, включая отсутствие значений, исключения и специфические ошибки. XResult предоставляет два основных варианта: Ok для успешного результата и Err для ошибки, содержащей причину типа ErrCause.
Универсальная монада XResult для Java
Изображение носит иллюстративный характер

ErrCause — расширяемый интерфейс для описания ошибок. Включает реализации: ExceptionCause для исключений, FilterCause для ошибок фильтрации, SimpleCause для текстовых сообщений. Отсутствие NullCause компенсируется созданием ExceptionCause с NullPointerException для обнаружения null. Метод fromCallable() автоматически оборачивает результаты и ошибки в XResult, обрабатывая исключения и null.

Монада XResult обеспечивает композицию с помощью map(), flatMap(), filter(). Пример: получение пользователя может возвращать XResult.ofNullable(user) при успехе, XResult.err(exception) при исключении, XResult.err("HTTP error 401") при HTTP-ошибках. Можно расширить ErrCause классом HttpError для подробной информации об ошибках HTTP.

XResult легко внедряется в легаси проекты и создает безопасные API. Компактный и самодостаточный код (260 строк) без внешних зависимостей покрыт тестами. Разработан для Java 8, но совместим с более новыми версиями. В будущем возможно применение sealed интерфейсов, records и pattern matching для большей лаконичности кода.


Новое на сайте

19817В Луксоре нашли стелу с римским императором в образе фараона 19816Экипаж Artemis II о моменте, когда земля исчезла за луной 19815Почему луна выглядит по-разному в разных точках земли? 19814Adobe экстренно закрыла опасную дыру в Acrobat Reader, которую хакеры использовали с... 19813Метеорный поток, рождённый из умирающего астероида 19812Когда робот пишет за тебя прощальную смс 19811Что общего у лунной миссии, толстого попугая, загадочной плащаницы и лекарства от диабета? 19810Какие снимки Artemis II уже стали иконами лунной программы? 19809Кто на самом деле хочет сладкого — вы или ваши бактерии? 19808Как рекламные данные 500 миллионов телефонов оказались в руках спецслужб? 19807Экипаж Artemis II вернулся на землю после десяти дней в космосе 19806Зелёная и коричневая луна: почему геологи Artemis II уже не могут усидеть на месте 19805Эксперты уверены в теплозащитном щите Artemis II, несмотря на проблемы предшественника 19804Выжить внутри торнадо: каково это — когда тебя засасывает в воронку 19803Аляскинские косатки-охотники на млекопитающих замечены у берегов Сиэтла
Ссылка