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