Цель необязательного класса (Optional class) в Java 8 заключается в том, чтобы предоставить удобный способ обработки значений, которые могут отсутствовать (null значения).
В Java 8 и ранее использование null значений было распространено и это часто приводило к ошибкам NullPointerException (NPE), когда приложение пыталось обращаться к объекту со значением null. Необязательный класс был введен, чтобы избежать таких ошибок и обеспечить более безопасную работу с нулевыми значениями.
Необязательный класс является оберткой для объекта, который может иметь значение null или значение, которое не является null. Он содержит методы для проверки наличия значения, получения значения и выполнения действий в зависимости от наличия или отсутствия значения.
Использование необязательного класса может улучшить читаемость и безопасность кода, особенно если вы используете API, где некоторые значения могут быть неопределенными или отсутствующими. Это также помогает избежать ошибок NPE и делает код более защищенным и предсказуемым.
Пример:
Optional<String> optionalString = Optional.of("Hello");
if (optionalString.isPresent()) {
String value = optionalString.get();
System.out.println(value);
}
Optional<String> emptyOptional = Optional.empty();
String result = emptyOptional.orElse("Default Value");
System.out.println(result);
String anotherResult = emptyOptional.orElseGet(() -> "Another Default Value");
System.out.println(anotherResult);
emptyOptional.ifPresent(System.out::println);
В данном примере мы создаем объект Optional для строки "Hello", проверяем наличие значения и выводим его, если оно есть. Затем мы создаем пустой объект Optional, используя метод empty(). Мы также демонстрируем использование методов orElse() и orElseGet(), которые возвращают значение по умолчанию, если опциональное значение отсутствует. Наконец, мы используем метод ifPresent(), чтобы выполнить действие только в том случае, если значение присутствует.
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov