Spec-Zone.ru › OpenJDK 27

Класс Optional<T>

java.lang.Object
java.util.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<T> empty()
Возвращает пустой экземпляр Optional.
boolean equals(Object obj)
Указывает, является ли какой-либо другой объект «равным» этому Optional.
Optional<T> filter(Predicate<? super T> predicate)
Если значение присутствует и соответствует заданному предикату, возвращает Optional, описывающий это значение; в противном случае возвращает пустой Optional.
<U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper)
Если значение присутствует, возвращает результат применения к нему заданной функции отображения, возвращающей Optional; в противном случае возвращает пустой Optional.
T get()
Если значение присутствует, возвращает его; в противном случае выбрасывает NoSuchElementException.
int hashCode()
Возвращает хеш-код значения, если оно присутствует, иначе возвращает 0 (ноль), если значение отсутствует.
void ifPresent(Consumer<? super T> action)
Если значение присутствует, выполняет заданное действие с ним; в противном случае ничего не делает.
void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
Если значение присутствует, выполняет заданное действие с ним; в противном случае выполняет заданное действие для пустого значения.
boolean isEmpty()
Если значение отсутствует, возвращает true, иначе возвращает false.
boolean isPresent()
Если значение присутствует, возвращает true, иначе возвращает false.
<U> Optional<U> map(Function<? super T, ? extends U> mapper)
Если значение присутствует, возвращает Optional, описывающий результат применения заданной функции отображения к значению (как если бы был вызван ofNullable(T)); в противном случае возвращает пустой Optional.
static <T> Optional<T> of(T value)
Возвращает Optional, описывающий заданное значение, отличное от null.
static <T> Optional<T> ofNullable(T value)
Возвращает Optional, описывающий заданное значение, если оно отлично от null; в противном случае возвращает пустой Optional.
Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
Если значение присутствует, возвращает Optional, описывающий это значение; в противном случае возвращает Optional, созданный предоставляющей функцией.
T orElse(T other)
Если значение присутствует, возвращает его; в противном случае возвращает other.
T orElseGet(Supplier<? extends T> supplier)
Если значение присутствует, возвращает его; в противном случае возвращает результат, созданный предоставляющей функцией.
T orElseThrow()
Если значение присутствует, возвращает его; в противном случае выбрасывает NoSuchElementException.
<X extends Throwable>
T
orElseThrow(Supplier<? extends X> exceptionSupplier)
Если значение присутствует, возвращает его; в противном случае выбрасывает исключение, созданное функцией предоставления исключения.
Stream<T> stream()
Если значение присутствует, возвращает последовательный Stream, содержащий только это значение; в противном случае возвращает пустой Stream.
String toString()
Возвращает непустое строковое представление этого Optional, удобное для отладки.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в будущем выпуске.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Переводит текущий поток в состояние ожидания до его пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до его пробуждения, обычно посредством уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание методов

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 и создает по нему путь, возвращая 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().
Переопределяет:
equals в классе Object
Параметры:
obj — объект, равенство которого проверяется
Возвращает:
true, если другой объект «равен» этому объекту; в противном случае — false
См. также:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Возвращает хеш-код значения, если оно присутствует, иначе возвращает 0 (ноль), если значение отсутствует.
Переопределяет:
hashCode в классе Object
Возвращает:
хеш-код присутствующего значения или 0, если значение отсутствует
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

toString

public String toString()
Возвращает непустое строковое представление этого Optional, удобное для отладки. Точный формат представления не определен и может различаться в разных реализациях и версиях.
Переопределяет:
toString в классе Object
Требования к реализации:
Если значение присутствует, результат должен содержать его строковое представление. Пустые и содержащие значение Optional должны однозначно различаться.
Возвращает:
строковое представление этого экземпляра

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API