Член команды Guava здесь.
Вероятно, самым большим недостатком nullявляется то, что неясно, что он должен означать в любом данном контексте: у него нет иллюстративного названия. Не всегда очевидно, что это nullозначает «нет значения для этого параметра» - черт возьми, в качестве возвращаемого значения иногда это означает «ошибку», или даже «успех» (!!), или просто «правильный ответ - ничего». Optionalчасто это понятие, которое вы имеете в виду, когда делаете переменную допускающей значение NULL, но не всегда. Если это не так, мы рекомендуем вам написать свой собственный класс, похожий на, Optionalно с другой схемой именования, чтобы прояснить, что вы на самом деле имеете в виду.
Но я бы сказал, что самое большое преимущество Optionalне в удобочитаемости: преимущество в его защищенности от идиотов. Это заставляет вас активно думать об отсутствующем случае, если вы хотите, чтобы ваша программа вообще компилировалась, поскольку вам нужно активно развернуть Optionalи обработать этот случай. Null позволяет легко забыть о чем-то, и хотя FindBugs помогает, я не думаю, что он решает проблему почти так же. Это особенно актуально, когда вы возвращаете значения, которые могут или не могут быть «присутствующими». У вас (и других) гораздо больше шансов забыть, что other.method(a, b)может возвращать nullзначение, чем вы, вероятно, забудете, что aмогло бы быть nullпри реализации other.method. ВозвращениеOptional делает невозможным для вызывающих забыть этот случай, поскольку они должны сами развернуть объект.
По этим причинам мы рекомендуем использовать Optionalв качестве возвращаемого типа для ваших методов, но не обязательно в аргументах вашего метода.
(Это, кстати, полностью взято из обсуждения здесь .)