Класс Optional в Java 8
Класс Optional — это объект-контейнер, который может быть null. Если значение существует, метод isPresent() возвращает true, а вызов метода get() возвращает объект.
Optional — это контейнер: он может содержать значение типа T или просто null. Optional предоставляет много полезных методов, поэтому нам не нужно явно выполнять проверки на null.
Введение класса Optional эффективно решает проблему исключения нулевого указателя.
Объявление класса
Ниже приведено объявление классаjava.util.Optional<T>:
Методы класса
| Порядковый номер | Метод и описание |
|---|---|
| 1 | static <T> Optional<T> empty()
Возвращает пустой экземпляр Optional. |
| 2 | boolean equals(Object obj)
Определяет, равен ли другой объект Optional. |
| 3 | Optional<T> filter(Predicate<? super <T> predicate)
Если значение существует и соответствует заданному предикату, возвращает Optional, описывающий это значение; в противном случае возвращает пустой Optional. |
| 4 | <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
Если значение существует, возвращает значение на основе метода отображения, содержащегося в Optional; в противном случае возвращает пустой Optional. |
| 5 | T get()
Если значение содержится в этом Optional, возвращает значение; в противном случае выбрасывает исключение: NoSuchElementException |
| 6 | int hashCode()
Возвращает хеш-код присутствующего значения или 0, если значение отсутствует. |
| 7 | void ifPresent(Consumer<? super T> consumer)
Если значение присутствует, вызывает consumer с этим значением; в противном случае ничего не делает. |
| 8 | boolean isPresent()
Метод возвращает true, если значение присутствует, в противном случае возвращает false. |
| 9 | <U>Optional<U> map(Function<? super T,? extends U> mapper)
Если значение присутствует, применяет к нему функцию отображения и получает возвращаемое значение. Если возвращаемое значение не null, создаёт Optional, содержащий отображённое возвращаемое значение, как возвращаемое значение метода map; в противном случае возвращает пустой Optional. |
| 10 | static <T> Optional<T> of(T value)
Возвращает Optional с указанным значением, не равным null. |
| 11 | static <T> Optional<T> ofNullable(T value)
Если значение не равно null, возвращает Optional, описывающий указанное значение; в противном случае возвращает пустой Optional. |
| 12 | T orElse(T other)
Если значение присутствует, возвращает значение; в противном случае возвращает other. |
| 13 | T orElseGet(Supplier<? extends T> other)
Если значение присутствует, возвращает значение; в противном случае вызывает other и возвращает результат вызова other. |
| 14 | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
Если значение присутствует, возвращает содержащееся значение; в противном случае выбрасывает исключение, предоставленное Supplier. |
| 15 | String toString()
Возвращает не null строку Optional, используемую для отладки. |
Примечание:Эти методы наследуются изjava.lang.Objectкласса.
Экземпляр Optional
Мы можем лучше понять использование класса Optional с помощью следующих примеров:
Файл Java8Tester.java
Выполнение приведённого выше скрипта даёт следующий вывод:
$ javac Java8Tester.java $ java Java8Tester 第一个参数值存在: false 第二个参数值存在: true 10
Другие расширения
Новые возможности Java 8