Хотя я согласен с тем, что Optional.get не соответствует цели, одна вещь, которую он гарантирует, заключается в том, что нужно гораздо более строго относиться к защитным проверкам там, где это необходимо.

В идеальном мире мне действительно не нужны «необязательные» поля и защитные проверки, но суровая реальность такова, что большинство кодовых баз и библиотек Java полны кода, который по существу допускает нулевые значения. Когда я вижу, что сигнатура чего-то является Optional‹T›, а не T, гораздо более вероятно, что я на самом деле выполню защитную проверку этой переменной.

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

Хотя статический анализ — это прекрасно, мы, к сожалению, используем много старого (а иногда и плохого) кода; только для этого я бы сказал, что было бы неплохо обернуть любые новые оболочки вокруг этого в Options