HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: java, java developer, программирование на java, разработка на java, null-монада, optional</p>
1 <p>Теги: java, java developer, программирование на java, разработка на java, null-монада, optional</p>
2 <p>В<a>первой части</a>мы рассмотрели случай, когда<strong>Null-монаду</strong>, т. е. Optional, разумно применить в программах на Java. В этот раз давайте посмотрим на некоторые детали использования.</p>
2 <p>В<a>первой части</a>мы рассмотрели случай, когда<strong>Null-монаду</strong>, т. е. Optional, разумно применить в программах на Java. В этот раз давайте посмотрим на некоторые детали использования.</p>
3 <h2>Начнём с вариантов создания</h2>
3 <h2>Начнём с вариантов создания</h2>
4 <p>Мы уже рассмотрели варианты Optional.ofNullable - это хороший способ создать Optional, если значение допустимо. Если Optional не может содержать Null, то можно использовать Optional.of. В этом случае прямо при создании Optional будет выполнена проверка значения на null, а при попытке передать null будет выброшено исключение.</p>
4 <p>Мы уже рассмотрели варианты Optional.ofNullable - это хороший способ создать Optional, если значение допустимо. Если Optional не может содержать Null, то можно использовать Optional.of. В этом случае прямо при создании Optional будет выполнена проверка значения на null, а при попытке передать null будет выброшено исключение.</p>
5 <p>Если требуется установить null, но нужно сделать это "осознанно" (т. е. сообщить, что в Optional мы явно помещаем значение null), следует использовать Optional.empty() как в примере из первой части. Optional готов и его можно использовать.</p>
5 <p>Если требуется установить null, но нужно сделать это "осознанно" (т. е. сообщить, что в Optional мы явно помещаем значение null), следует использовать Optional.empty() как в примере из первой части. Optional готов и его можно использовать.</p>
6 <p>Часто можно встретить такой код:</p>
6 <p>Часто можно встретить такой код:</p>
7 public Optional&lt;String&gt; mayBeNullOptional() { return Optional.ofNullable("test"); //return Optional.ofNullable(null); // return Optional.empty(); } public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); if (value.isPresent() ) { System.out.println("value:" + value.get()); } else { System.out.println("value is empty"); } }<p><strong>isPresent</strong>работает как ожидается, однако это не соответствует стилю использования Optional. Вариант лучше будет выглядеть так:</p>
7 public Optional&lt;String&gt; mayBeNullOptional() { return Optional.ofNullable("test"); //return Optional.ofNullable(null); // return Optional.empty(); } public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); if (value.isPresent() ) { System.out.println("value:" + value.get()); } else { System.out.println("value is empty"); } }<p><strong>isPresent</strong>работает как ожидается, однако это не соответствует стилю использования Optional. Вариант лучше будет выглядеть так:</p>
8 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); System.out.println( value.map(val -&gt; "value:" + value.get()) .orElse("value is empty")); }<p>Если требуется из Optional извлечь значение, то можно сразу предусмотреть вариант на случай отсутствия значения. Можно вернуть константу как в примере ниже:</p>
8 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); System.out.println( value.map(val -&gt; "value:" + value.get()) .orElse("value is empty")); }<p>Если требуется из Optional извлечь значение, то можно сразу предусмотреть вариант на случай отсутствия значения. Можно вернуть константу как в примере ниже:</p>
9 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); String strFromOptional = value.orElse("null str"); System.out.println(strFromOptional); }<p>А можно выполнить другую функцию (эта возможность появилась в<strong>java9</strong>):</p>
9 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); String strFromOptional = value.orElse("null str"); System.out.println(strFromOptional); }<p>А можно выполнить другую функцию (эта возможность появилась в<strong>java9</strong>):</p>
10 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); String strFromOptional = value.or(() -&gt; Optional.of("null str")).get(); System.out.println(strFromOptional); }<p>Optional можно и даже нужно включить в stream обработчиков. Например, так:</p>
10 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); String strFromOptional = value.or(() -&gt; Optional.of("null str")).get(); System.out.println(strFromOptional); }<p>Optional можно и даже нужно включить в stream обработчиков. Например, так:</p>
11 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); List&lt;String&gt; list = value.stream().map(String::toUpperCase).collect(Collectors.toList()); System.out.println(list); }<p>Тут важно отметить, что даже если mayBeNullOptional вернёт<strong>empty</strong>, то NPE не произойдёт.</p>
11 public void useMayBeNullOptional() { Optional&lt;String&gt; value = mayBeNullOptional(); List&lt;String&gt; list = value.stream().map(String::toUpperCase).collect(Collectors.toList()); System.out.println(list); }<p>Тут важно отметить, что даже если mayBeNullOptional вернёт<strong>empty</strong>, то NPE не произойдёт.</p>
12 <h2>Делаем выводы</h2>
12 <h2>Делаем выводы</h2>
13 <p><strong>Optional</strong>- очень удобный функционал для работы со значениями. Это хороший пример<strong>null-монады</strong>. В мире функционального программирования кроме null-монады есть ещё одна очень интересная штука -<strong>try-монада</strong>. Она нужна для упрощения работы с исключениями. Как Try-монаду использовать в java мы поговорим в следующий раз…</p>
13 <p><strong>Optional</strong>- очень удобный функционал для работы со значениями. Это хороший пример<strong>null-монады</strong>. В мире функционального программирования кроме null-монады есть ещё одна очень интересная штука -<strong>try-монада</strong>. Она нужна для упрощения работы с исключениями. Как Try-монаду использовать в java мы поговорим в следующий раз…</p>
14 <p><em>Есть вопрос? Напишите в комментариях!</em></p>
14 <p><em>Есть вопрос? Напишите в комментариях!</em></p>
15  
15