tags | title |
---|---|
Java, Basic, java.util, Optional |
Optional |
Предоставляет более удобный способ обработки null значений.
class Optional<T>
Основные методы это boolean isPresent()
и T get()
. Первый метод проверяет записано ли в объекте значение, второй его возвращает.
==Если внутри Optional null, то get() кинет исключение NoSuchElementException.==
Есть метод orElse(default)
, который возвращает значение по умолчанию, если внутри null.
Есть метод ifPresent(Consumer<? super T> consumer)
, который применяет consumer только если внутри не null. То есть не нужно писать самому if.
Открытых конструкторов нет, но есть несколько статических методов
Метод | Комментарий |
---|---|
empty() |
Возвращает объект, содержащий null |
of(T value) |
Создаёт объект содержащий value. value не должен быть null |
ofNullable(T value) |
Если значение null, то возвращает пустой объект, иначе объект содержащий value |
Метод | Комментарий |
---|---|
Optional<T> filter(Predicate<T> p) |
Если true то вернёт тот же объект, иначе EMPTY |
T orElseGet(Supplier<? extends T> other) |
Возвращает объект если он не EMPTY, иначе возвращает результат Supplier |
<U> Optional<U> map(Function<T, U>) |
Если объект не EMPTY, то применяет к нему функцию, иначе возвращает EMPTY |
<U> Optional<U> flatMap(Function<T, Optional<U>>) |
Если объект не EMPTY, то применяет к нему функцию, иначе возвращает EMPTY |
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X |
Либо возвращает значение, либо кидает исключение |
Существуют классы OptionalDouble, OptionalInt и OptionalLong для работы с примитивами. Логика работы такая же, но методы получения объектов называются по другому (getAsDouble()
, getAsInt()
и getAsLong()
).
Также там нет методов filter()
, ofNullable()
, map()
и flatMap()
.