В функциональных языках является общим для использования сопоставления с образцом на дополнительных типах:Есть ли() на Java?
let result = match myOptional with
| Some x -> x * 2
| None -> 0
Это очень полезно для программиста, так как компилятор проверяет, что шаблон спичка завершена.
Однако в примерах для Java-х Optional
, что я видел, isPresent
и get
используются вместо:
Integer result;
if (myOptional.isPresent()) {
result = myOptional.get() * 2;
} else {
result = 0;
}
Для меня это поражения цели Optional
. Компилятор не проверяет, чтобы обе ветви if
были правильно реализованы, и полученный код не имеет дополнительных гарантий, чем эквивалент, используя null
.
Этот вариант дизайна не рекомендует безопасность, поэтому почему стандартная библиотека предоставляет функцию get
вместо match
?
Какую «правильность» вы хотите, чтобы компилятор проверял? Определенное назначение гарантирует, что вы назначили 'результат', прежде чем использовать его; Я не могу думать, что еще ты хочешь. (Возможно, я просто не могу вообразить здесь ...) –
Да, это помогает программисту избежать NPE. – sdgfsdh
«Это помогает программисту избежать NPE». Но какие NPE вы бы получили в этом случае? –