Spec-Zone.ru › OpenJDK 25

Класс 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

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

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().
Переопределяет:
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
Требования к реализации:
Если значение присутствует, результат должен включать его строковое представление. Пустые и непустые Optionals должны однозначно различаться.
Возвращает:
строковое представление этого экземпляра

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Optional.html

Spec-Zone.ru

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