Класс Optional в Java

Класс Optional<T> это контейнерный объект, который может содержать или не содержать ненулевое значение. Если значение присутствует, isPresent() вернет true, а get() вернет значение.

Предоставляются дополнительные методы, которые зависят от наличия или отсутствия содержащегося в нем значения, например orElse() (возвращает значение по умолчанию, если значение отсутствует) и ifPresent() (выполняет блок кода, если значение присутствует).

Это основанный на значении класс; использование чувствительных к идентичности операций (включая равенство ссылок (==), хэш-код идентичность, синхронизацию) в экземплярах Optional может привести к непредсказуемым результатам и этого следует избегать.

Optional был введен в Java 8, чтобы избавиться от исключений NullPointerException. По сути, Optional - это класс-оболочка, который содержит ссылку на какой-то другой объект. В этом контексте объект - это просто указатель на область памяти, и он также может указывать на ничто. Optional был введен, чтобы предоставить решение на уровне типов для предоставления необязательных значений вместо нулевых ссылок.

Создание Optional

Есть три метода для создания экземпляра Optional.

1. static <T> Optional<T> empty()

Возвращает пустой экземпляр Optional.

// Создание пустого экземпляра Optional
Optional<Integer> zero = Optional.empty();

У пустого экземпляра Optional нет значения. Избегайте проверки, что Optional объект пуст, сравнивая его с помощью == с экземпляром, возвращаемым Option.empty(). Вместо этого используйте метод isPresent() проверяемого Optional объекта.

2. static <T> Optional<T> of(T value)

Возвращает Optional с переданным в качестве аргумента ненулевым значением.

// Создание экземпляра Optional с помощью метода of
Integer one = 1;
Optional<Integer> oneOptional = Optional.of(one);

Статический метод of ожидает ненулевой аргумент, в противном случае он выдаст NullPointerException. Так что, если мы не знаем, будет ли аргумент нулевым (null) или нет, тогда следует использовать метод ofNullable, который описан ниже.

3. static <T> Optional<T> ofNullable(T value)

Возвращает экземпляр Optional, содержащий переданное значение, если оно не равно null, в противном случае возвращает пустой Optional.

Optional<Integer> optional = Optional.ofNullable(getInteger());

private Integer getInteger(){
    Integer one = 1;
    return (one > 2) ? one : null;
}

Таким образом, если мы передаем пустой Integer, метод ofNullable не выдает исключение, а возвращает пустой Optional объект.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки