Зачем использовать Необязательный.выше опции Optional.ofNullable?
При использовании класса Java 8 Optional
существует два способа, в которых значение может быть обернуто в необязательный.
String foobar = <value or null>;
Optional.of(foobar); // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
Я понимаю, что Optional.ofNullable
- единственный безопасный способ использования Optional
, но почему существует Optional.of
вообще? Почему бы просто не использовать Optional.ofNullable
и всегда быть в безопасности?
Ответы
Ответ 1
Ваш вопрос основан на предположении, что код, который может бросать NullPointerException
, хуже кода, который не может быть. Это предположение неверно. Если вы ожидаете, что ваш foobar
никогда не является нулевым из-за логики программы, гораздо лучше использовать Optional.of(foobar)
, поскольку вы увидите NullPointerException
, который укажет, что ваша программа имеет ошибку. Если вы используете Optional.ofNullable(foobar)
, а foobar
окажется null
из-за ошибки, ваша программа будет тихо продолжать работать некорректно, что может быть большой катастрофой. Таким образом, ошибка может произойти намного позже, и было бы намного сложнее понять, в какой момент это пошло не так.
Ответ 2
Кроме того, если вы знаете, что ваш код не должен работать, если объект имеет значение null, вы можете исключить исключение с помощью параметра Optional.orElseThrow
String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(NullPointerException::new);
@tagir-valeev, Пожалуйста, исправьте, если я ошибаюсь.
Ответ 3
Это полностью зависит от сценариев, у класса Optional есть закрытый конструктор, поэтому мы не можем создать объект с помощью нового ключевого слова. В зависимости от требования мы можем использовать метод
- empty(): для объекта без значения, Insted используя null, мы можем использовать Optional.empty()
- of (T value): create Необязательный для некоторого значения: в этом методе нулевое значение не допускается.
- ofNullable (значение T): создать Необязательный некоторого значения, и если значение может быть нулевым
Таким образом, мы можем сказать, что если вы уверены, что значение не равно нулю, вы можете использовать of(), и если вы считаете, что значение может быть нулевым, вы должны использовать ofNullable()
Для более подробной информации вы можете обратиться к тому, как создать опцию объекта в Java 8
Ответ 4
Необязательно, в основном, должны использоваться для получения результатов Услуг. В сервисе вы знаете, что у вас есть, и возвратите Option.of(someValue), если у вас есть результат и возвратите Option.empty(), если вы этого не сделаете. В этом случае некоторая ценность никогда не должна быть нулевой и все же, вы возвращаете Необязательный.
Ответ 5
Это зависит от сценариев.
Допустим, у вас есть бизнес-функциональность, и вам нужно обрабатывать что-то с этим значением дальше, но это может повлиять на null
значение во время обработки.
Тогда, в этом случае, вы можете использовать Optional<?>
.
String nullName = null;
String name = Optional.ofNullable(nullName)
.map(<doSomething>)
.orElse("Default value in case of null");