Использовать sealed interface + records + исчерпывающий pattern matching в switch = типобезопасно и контролируется компилятором.
Больше никаких
RuntimeException для случаев вроде "not found" / "invalid input" / "unauthorized" — компилятор заставляет обработать каждый возможный результат.Преимущества в реальном коде:
- Ноль неожиданных исключений во время выполнения
- Понятно, что может произойти, просто посмотрев на сигнатуру метода
- Значительно проще тестировать и рефакторить
- Читается почти как
Result в Rust или Result в Kotlin👉 Java Portal
