Класс 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 |
Указывает, является ли другой объект «равным» этому Optional. |
Optional<T> |
filter |
Если значение присутствует и совпадает с заданным предикатом, возвращает Optional, описывающее значение, в противном случае возвращает пустой Optional. |
<U> Optional<U> |
flatMap |
Если значение присутствует, возвращает результат применения заданной функции отображения, несущей Optional, к значению, в противном случае возвращает пустой Optional. |
T |
get() |
Если значение присутствует, возвращает значение, в противном случае выбрасывает NoSuchElementException. |
int |
hashCode() |
Возвращает код хэширования значения, если оно присутствует, в противном случае 0 (ноль), если значение отсутствует. |
void |
ifPresent |
Если значение присутствует, выполняет заданное действие со значением, в противном случае ничего не делает. |
void |
ifPresentOrElse |
Если значение присутствует, выполняет заданное действие со значением, в противном случае выполняет заданное действие, связанное с отсутствием значения. |
boolean |
isEmpty() |
Если значение отсутствует, возвращает true, в противном случае false. |
boolean |
isPresent() |
Если значение присутствует, возвращает true, в противном случае false. |
<U> Optional<U> |
map |
Если значение присутствует, возвращает Optional, описывающее (как если бы с помощью ofNullable(T)) результат применения заданной функции отображения к значению, в противном случае возвращает пустой Optional. |
static <T> Optional<T> |
of |
Возвращает Optional, описывающий заданное значение, отличное от null. |
static <T> Optional<T> |
ofNullable |
Возвращает Optional, описывающее заданное значение, если оно не null, в противном случае возвращает пустой Optional. |
Optional<T> |
or |
Если значение присутствует, возвращает Optional, описывающее значение, в противном случае возвращает Optional, сгенерированное предоставленной функцией. |
T |
orElse |
Если значение присутствует, возвращает значение, в противном случае возвращает other. |
T |
orElseGet |
Если значение присутствует, возвращает значение, в противном случае возвращает результат, произведённый предоставленной функцией. |
T |
orElseThrow() |
Если значение присутствует, возвращает значение, в противном случае выбрасывает NoSuchElementException. |
<X extends Throwable> |
orElseThrow |
Если значение присутствует, возвращает значение, в противном случае выбрасывает исключение, сгенерированное функцией предоставления исключения. |
Stream<T> |
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без необходимости явного проверки состояния возврата. Например, следующий код проходит по потоку URIs, выбирает один, который еще не обработан, и создает путь из этого 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 Note:
- В качестве поставщика можно использовать ссылку на метод конструктора исключения с пустым списком аргументов. Например,
IllegalStateException::new - Type Parameters:
-
X- Тип исключения, которое будет выброшено - Parameters:
-
exceptionSupplier- функция, которая предоставляет исключение, которое будет выброшено - Returns:
- значение, если оно присутствует
- Throws:
-
X- если значение не присутствует -
NullPointerException- если значение не присутствует и функция, предоставляющая исключение,null
equals
public boolean equals(Object obj)
- он также является
Optional; - оба экземпляра не содержат значения или;
- присутствующие значения "равны" друг другу по
equals().
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объект, который необходимо проверить на равенство - Returns:
-
trueесли другой объект "равен" этому объекту, иначеfalse - See Also:
hashCode
public int hashCode()
0 (ноль), если значение не присутствует.- Overrides:
-
hashCodeв классеObject - Returns:
- значение хэш-кода присутствующего значения или
0если значение не присутствует - See Also:
toString
public String toString()
- Overrides:
-
toStringв классеObject - Implementation Requirements:
- Если значение присутствует, результат должен включать его строковое представление в результате. Пустые и присутствующие
Optionalдолжны быть однозначно различимы. - Returns:
- строковое представление этого экземпляра
© 1993, 2021, 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/17/docs/api/java.base/java/util/Optional.html