Член команди гуави тут.
Ймовірно, найбільшим недоліком nullє те, що не очевидно, що це повинно означати в будь-якому даному контексті: він не має ілюстративної назви. Не завжди очевидно, що nullозначає "немає значення для цього параметра" - чорт, як повернене значення, іноді це означає "помилка", або навіть "успіх" (!!), або просто "правильна відповідь - нічого". Optionalчасто є поняттям, яке ви насправді маєте на увазі, коли ви робите змінну нульовою, але не завжди. Якщо це не так, ми рекомендуємо написати власний клас, подібний до, Optionalале з іншою схемою іменування, щоб чітко пояснити, що ви насправді маєте на увазі.
Але я б сказав, що найбільша перевага Optionalполягає не в читабельності: перевага полягає в його ідіотостійкості. Це змушує вас активно думати про відсутність справи, якщо ви хочете, щоб ваша програма взагалі була скомпільована, оскільки вам доведеться активно розгортати Optionalта розглядати цю справу. Null дозволяє тривожно легко просто забути речі, і хоча FindBugs допомагає, я не думаю, що це вирішує проблему майже так само добре. Це особливо актуально, коли ви повертаєте значення, які можуть бути або не бути "наявними". Ви (та інші) набагато частіше забуваєте, що other.method(a, b)може повернути nullзначення, ніж ви, швидше за все, забудете, що aможе бути, nullколи ви впроваджуєте other.method. ПовертаючисьOptional робить неможливим абонентам забути цей випадок, оскільки їм доводиться розгортати об’єкт самостійно.
З цих причин ми рекомендуємо використовувати Optionalтип повернення для своїх методів, але не обов’язково в аргументах методу.
(Це, до речі, повністю вигадано з обговорення тут ).