Класс Optional<T>
- Параметры типа:
T— тип значения
public final class Optional<T> extends Object
null. Если значение присутствует, isPresent() возвращает true. Если значение отсутствует, объект считается пустым, и isPresent() возвращает false. Предоставляются дополнительные методы, зависящие от наличия или отсутствия содержащегося значения, например orElse() (возвращает значение по умолчанию, если значение отсутствует) и ifPresent() (выполняет действие, если значение присутствует).
Это класс, основанный на значениях; программистам следует считать экземпляры, которые равны, взаимозаменяемыми и не использовать экземпляры для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться неудачей.
- Примечание к API:
-
Optionalпредназначен главным образом для использования в качестве типа возвращаемого значения метода, когда явно требуется представить «отсутствие результата» и использованиеnullможет привести к ошибкам. Переменная типаOptionalсама по себе никогда не должна бытьnull; она всегда должна указывать на экземплярOptional. - Начиная с версии:
- 1.8
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> Optional |
empty() |
Возвращает пустой экземпляр Optional. |
boolean |
equals |
Указывает, является ли другой объект «равным» этому Optional. |
Optional |
filter |
Если значение присутствует и соответствует заданному предикату, возвращает Optional, описывающий это значение; в противном случае возвращает пустой Optional. |
<U> Optional |
flatMap |
Если значение присутствует, возвращает результат применения к нему заданной функции отображения, возвращающей Optional; в противном случае возвращает пустой Optional. |
T |
get() |
Если значение присутствует, возвращает его; в противном случае выбрасывает NoSuchElementException. |
int |
hashCode() |
Возвращает хеш-код значения, если оно присутствует; в противном случае, если значение отсутствует, возвращает 0 (ноль). |
void |
ifPresent |
Если значение присутствует, выполняет заданное действие с этим значением; в противном случае ничего не делает. |
void |
ifPresentOrElse |
Если значение присутствует, выполняет заданное действие с этим значением; в противном случае выполняет заданное действие для пустого значения. |
boolean |
isEmpty() |
Если значение отсутствует, возвращает true; в противном случае — false. |
boolean |
isPresent() |
Если значение присутствует, возвращает true; в противном случае — false. |
<U> Optional |
map |
Если значение присутствует, возвращает Optional, описывающий (как если бы использовался ofNullable(T)) результат применения заданной функции отображения к значению; в противном случае возвращает пустой Optional. |
static <T> Optional |
of |
Возвращает Optional, описывающий заданное значение, отличное от null. |
static <T> Optional |
ofNullable |
Возвращает Optional, описывающий заданное значение, если оно отлично от null; в противном случае возвращает пустой Optional. |
Optional |
or |
Если значение присутствует, возвращает Optional, описывающий это значение; в противном случае возвращает Optional, созданный предоставляющей функцией. |
T |
orElse |
Если значение присутствует, возвращает его; в противном случае возвращает other. |
T |
orElseGet |
Если значение присутствует, возвращает его; в противном случае возвращает результат, созданный предоставляющей функцией. |
T |
orElseThrow() |
Если значение присутствует, возвращает его; в противном случае выбрасывает NoSuchElementException. |
<X extends Throwable> |
orElseThrow |
Если значение присутствует, возвращает его; в противном случае выбрасывает исключение, созданное функцией, предоставляющей исключение. |
Stream |
stream() |
Если значение присутствует, возвращает последовательный Stream, содержащий только это значение; в противном случае возвращает пустой Stream. |
String |
toString() |
Возвращает непустое строковое представление этого Optional, подходящее для отладки. |
Подробное описание методов
empty
public static <T> Optional<T> empty()
Optional. Для этого Optional значение отсутствует.- Примечание к API:
- Хотя это может показаться заманчивым, не следует проверять, является ли объект пустым, сравнивая его с
==или!=с экземплярами, возвращёнными методомOptional.empty(). Нет гарантии, что это синглтон. Вместо этого используйтеisEmpty()илиisPresent(). - Параметры типа:
T— тип несуществующего значения- Возвращает:
- пустой
Optional
of
public static <T> Optional<T> of(T value)
Optional, описывающий заданное значение, отличное от null.- Параметры типа:
T— тип значения- Параметры:
-
value— описываемое значение, которое не должно бытьnull - Возвращает:
Optionalс присутствующим значением- Выбрасывает:
-
NullPointerException— если значение равноnull
ofNullable
public static <T> Optional<T> ofNullable(T value)
Optional, описывающий заданное значение, если оно отлично от null; в противном случае возвращает пустой Optional.- Параметры типа:
T— тип значения- Параметры:
-
value— возможно, равноеnullзначение для описания - Возвращает:
Optionalс присутствующим значением, если указанное значение отлично отnull; в противном случае — пустойOptional
get
public T get()
NoSuchElementException.- Примечание к API:
- Предпочтительная альтернатива этому методу —
orElseThrow(). - Возвращает:
- значение, отличное от
null, описанное этимOptional - Выбрасывает:
-
NoSuchElementException— если значение отсутствует
isPresent
public boolean isPresent()
true; в противном случае — false.- Возвращает:
-
true, если значение присутствует; в противном случае —false
isEmpty
public boolean isEmpty()
true; в противном случае — false.- Возвращает:
-
true, если значение отсутствует; в противном случае —false - Начиная с версии:
- 11
ifPresent
public void ifPresent(Consumer<? super T> action)
- Параметры:
-
action— действие, выполняемое, если значение присутствует - Выбрасывает:
-
NullPointerException— если значение присутствует, а заданное действие равноnull
ifPresentOrElse
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
- Параметры:
-
action— действие, выполняемое, если значение присутствует -
emptyAction— действие для пустого значения, выполняемое, если значение отсутствует - Выбрасывает:
-
NullPointerException— если значение присутствует, а заданное действие равноnull, либо если значение отсутствует, а заданное действие для пустого значения равноnull. - Начиная с версии:
- 9
filter
public Optional<T> filter(Predicate<? super T> predicate)
Optional, описывающий это значение; в противном случае возвращает пустой Optional.- Параметры:
-
predicate— предикат, применяемый к значению, если оно присутствует - Возвращает:
Optional, описывающий значение этогоOptional, если значение присутствует и соответствует заданному предикату; в противном случае — пустойOptional- Выбрасывает:
-
NullPointerException— если предикат равенnull
map
public <U> Optional<U> map(Function<? super T, ? extends U> mapper)
Optional, описывающий (как если бы использовался ofNullable(T)) результат применения заданной функции отображения к значению; в противном случае возвращает пустой Optional. Если функция отображения возвращает результат null, этот метод возвращает пустой Optional.
- Примечание к API:
- Этот метод позволяет выполнять постобработку значений
Optionalбез необходимости явно проверять статус возврата. Например, следующий код проходит по потоку URI, выбирает ещё не обработанный URI и создаёт путь на основе этого URI, возвращаяOptional<Path>:
ЗдесьOptional<Path> p = uris.stream().filter(uri -> !isProcessedYet(uri)) .findFirst() .map(Paths::get);findFirstвозвращаетOptional<URI>, а затемmapвозвращаетOptional<Path>для нужного URI, если такой существует. - Параметры типа:
U— тип значения, возвращаемого функцией отображения- Параметры:
-
mapper— функция отображения, применяемая к значению, если оно присутствует - Возвращает:
Optional, описывающий результат применения функции отображения к значению этогоOptional, если значение присутствует; в противном случае — пустойOptional- Выбрасывает:
-
NullPointerException— если функция отображения равнаnull
flatMap
public <U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper)
Optional; в противном случае возвращает пустой Optional. Этот метод похож на map(Function), но функция отображения возвращает уже готовый Optional, и при её вызове flatMap не оборачивает его в дополнительный Optional.
- Параметры типа:
U— тип значенияOptional, возвращаемого функцией отображения- Параметры:
-
mapper— функция отображения, применяемая к значению, если оно присутствует - Возвращает:
- результат применения функции отображения, возвращающей
Optional, к значению этогоOptional, если значение присутствует; в противном случае — пустойOptional - Выбрасывает:
-
NullPointerException— если функция отображения равнаnullили возвращает результатnull
or
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
Optional, описывающий это значение; в противном случае возвращает Optional, созданный предоставляющей функцией.- Параметры:
-
supplier— предоставляющая функция, создающая возвращаемыйOptional - Возвращает:
- возвращает
Optional, описывающий значение этогоOptional, если значение присутствует; в противном случае —Optional, созданный предоставляющей функцией. - Выбрасывает:
-
NullPointerException— если предоставляющая функция равнаnullили создаёт результатnull - Начиная с версии:
- 9
stream
public Stream<T> stream()
Stream, содержащий только это значение; в противном случае возвращает пустой Stream.- Примечание к API:
- Этот метод можно использовать для преобразования
Streamнеобязательных элементов вStreamэлементов с присутствующими значениями:Stream<Optional<T>> os = .. Stream<T> s = os.flatMap(Optional::stream) - Возвращает:
- необязательное значение в виде
Stream - Начиная с версии:
- 9
orElse
public T orElse(T other)
other.- Параметры:
-
other— значение, возвращаемое при отсутствии значения. Может бытьnull. - Возвращает:
- значение, если оно присутствует; в противном случае —
other
orElseGet
public T orElseGet(Supplier<? extends T> supplier)
- Параметры:
-
supplier— предоставляющая функция, создающая возвращаемое значение - Возвращает:
- значение, если оно присутствует; в противном случае — результат, созданный предоставляющей функцией
- Выбрасывает:
-
NullPointerException— если значение отсутствует, а предоставляющая функция равнаnull
orElseThrow
public T orElseThrow()
NoSuchElementException.- Возвращает:
- значение, отличное от
null, описанное этимOptional - Выбрасывает:
-
NoSuchElementException— если значение отсутствует - Начиная с версии:
- 10
orElseThrow
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
- Примечание к API:
- В качестве предоставляющей функции можно использовать ссылку на метод-конструктор исключения без аргументов. Например:
IllegalStateException::new - Параметры типа:
X— тип выбрасываемого исключения- Параметры:
-
exceptionSupplier— предоставляющая функция, создающая выбрасываемое исключение - Возвращает:
- значение, если оно присутствует
- Выбрасывает:
-
X— если значение отсутствует -
NullPointerException— если значение отсутствует, а функция, предоставляющая исключение, равнаnullили создаёт результатnull
equals
public boolean equals(Object obj)
Optional. Другой объект считается равным, если: - он также является
Optional; - у обоих экземпляров отсутствуют значения; либо
- присутствующие значения «равны» друг другу согласно
equals().
hashCode
toString
public String toString()
Optional, подходящее для отладки. Точный формат представления не определён и может различаться в разных реализациях и версиях.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Optional.html