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