English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Класс Optional - это контейнер对象, который может быть равен null. Если значение существует, метод isPresent() возвращает true, а метод get() возвращает объект.
Optional — это контейнер: он может сохранять значение типа T или просто сохранять null. Optional предоставляет множество полезных методов, чтобы мы не могли явно выполнять проверку на наличие null.
Введение класса Optional эффективно решает проблему исключения NullPointer.
Ниже приведен пример java.util.Optional<T> Заявление класса:
public final class Optional<T> extends Object
Номер | Метод & Описание |
---|---|
1 | static <T> Optional<T> empty() Возвращает пример пустого Optional. |
2 | boolean equals(Object obj) Определяет, равен ли Optional другому объекту. |
3 | Optional<T> filter(Predicate<? super <T> predicate) Если значение существует и это значение соответствует заданному 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 с указанным non-null значением. |
11 | static <T> Optional<T> ofNullable(T value) Если не пусто, возвращает значение, описанное 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() Возвращает не空的 Optional строки для отладки |
Примечание: Эти методы взяты из java.lang.Object унаследованные из класса.
Мы можем лучше понять использование класса Optional с помощью следующего примера:
import java.util.Optional; public class Java8Tester { public static void main(String args[]){ Java8Tester java8Tester = new Java8Tester(); Integer value1 = null; Integer value2 = new Integer(10); // Optional.ofNullable - позволяет передавать параметр null Optional<Integer> a = Optional.ofNullable(value1); // Optional.of - если переданный параметр null, выбрасывается исключение NullPointerException Optional<Integer> b = Optional.of(value2); System.out.println(java8Tester.sum(a, b)); } public Integer sum(Optional<Integer> a, Optional<Integer> b){ // Optional.isPresent -�断是否存在值 System.out.println(" Worth of the first parameter exists: " + a.isPresent()); System.out.println(" Worth of the second parameter exists: " + b.isPresent()); // Optional.orElse - если значение существует, верните его, в противном случае верните значение по умолчанию Integer value1 = a.orElse(new Integer(0)); // Optional.get - получить значение, значение должно существовать Integer value2 = b.get(); return value1 + value2; } }
Выполните приведенный выше скрипт, и результат будет следующим:
$ javac Java8Tester.java $ java Java8Tester Worth of the first parameter exists: false Worth of the second parameter exists: true 10