Візьміть два приклади коду:
if(optional.isPresent()) {
//do your thing
}
if(variable != null) {
//do your thing
}
Наскільки я можу сказати, найбільш очевидною різницею є те, що необов'язково вимагає створення додаткового об'єкта.
Однак багато людей почали швидко приймати необов’язкові. Яка перевага використання необов’язкових даних проти нульової перевірки?
if
заяви дуууже останнє десятиліття, і все це з допомогою монади абстракцій і лямбда в даний час.
if(x.isPresent) fails_on_null(x.get)
ви виходите з системи типу і дотримуєтесь гарантії того, що код не зламається «в голові» на (правдоподібно коротку) відстань між умовою та викликом функції. У optional.ifPresent(fails_on_null)
системі типу ця гарантія надається вам, і вам не потрібно хвилюватися.
Optional.ifPresent
(та різних інших конструкцій Java) полягає в тому, що ви можете лише ефективно змінювати остаточні змінні та не можете кидати перевірені винятки. Це є достатньою причиною, щоб ifPresent
, на жаль, часто уникати .