From 8364c2fa3b9a2598510ae3cbb1a1684b84e62278 Mon Sep 17 00:00:00 2001 From: many2many <6168830@qq.com> Date: Wed, 23 Oct 2024 10:36:32 +0800 Subject: [PATCH] optional example changed --- docs/chapter05.md | 73 ++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/docs/chapter05.md b/docs/chapter05.md index 538488f..0c14372 100644 --- a/docs/chapter05.md +++ b/docs/chapter05.md @@ -85,6 +85,10 @@ public @interface 注解名称{ - 使用注解: 在代码中应用注解。 - 读取注解: 通过反射或其他机制读取并处理注解。 + + + + ### 5.1.3 `Optional` 的介绍和使用(了解) #### 定义 @@ -98,46 +102,63 @@ public @interface 注解名称{ - **`Optional.of(T value)`**: 如果 `value` 不为 `null`,则创建一个包含该值的 `Optional` 对象;如果 `value` 为 `null`,则抛出 `NullPointerException`。 - **`Optional.ofNullable(T value)`**: 如果 `value` 不为 `null`,则创建一个包含该值的 `Optional` 对象;如果 `value` 为 `null`,则返回一个空的 `Optional` 对象。 - **`Optional.empty()`**: 返回一个空的 `Optional` 对象。 +- **`Optional.ifPresent(Consumer action)`**: 如果 `Optional` 包含值,则执行 `action`;否则不执行任何操作。 - **`Optional.isPresent()`**: 判断 `Optional` 是否包含值。 - **`Optional.orElse(T other)`**: 如果 `Optional` 包含值,则返回该值;否则返回 `other`。 - **`Optional.orElseGet(Supplier other)`**: 如果 `Optional` 包含值,则返回该值;否则返回由 `Supplier` 提供的值。 - **`Optional.orElseThrow(Supplier exceptionSupplier)`**: 如果 `Optional` 包含值,则返回该值;否则抛出由 `exceptionSupplier` 生成的异常。 -- **`Optional.ifPresent(Consumer action)`**: 如果 `Optional` 包含值,则执行 `action`;否则不执行任何操作。 #### 示例 ```java + import java.util.Optional; +import java.util.Random; +/** + * OptionalExample 类演示了 Java Optional 类的多种用法 + */ public class OptionalExample { - public static void main(String[] args) { - // 使用Optional.ofNullable封装可能为null的值 - Optional optional = Optional.ofNullable(getName()); - - // 使用ifPresent方法处理Optional中的值 - optional.ifPresent(System.out::println); - - // 使用orElse处理Optional为空的情况 - String name = optional.orElse("Default Name"); - System.out.println("Name: " + name); - - // 使用orElseGet处理Optional为空的情况 - name = optional.orElseGet(() -> "Computed Default Name"); - System.out.println("Computed Name: " + name); - - // 使用orElseThrow处理Optional为空的情况 - try { - name = optional.orElseThrow(() -> new IllegalArgumentException("Name is missing")); - System.out.println("Name: " + name); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - } - + /** + * 获取一个随机名字的 Optional 对象 + * 有 50% 的概率返回包含 "John Doe" 的 Optional 对象,否则返回空的 Optional 对象 + * + * @return Optional 包含名字的 Optional 对象或空的 Optional 对象 + */ + private static Optional getName() { + if (new Random().nextBoolean()) { + return Optional.of("John Doe"); + } else { + return Optional.empty(); } + } - private static String getName() { - return null; // 或者返回一个实际的值 + public static void main(String[] args) { + + // 获取可能为空的名字,用Optional包装以安全地处理空值 + Optional optional = getName(); + + // 使用 ifPresent 方法处理 Optional 中的值 + optional.ifPresent(System.out::println); + optional.ifPresent(name -> System.out.println("Name: " + name.toLowerCase())); + + // 使用 orElse 处理 Optional 为空的情况 + String name = optional.orElse("Default Name"); + System.out.println("Name: " + name); + + // 使用 orElseGet 处理 Optional 为空的情况 + name = optional.orElseGet(() -> "Computed Name"); + System.out.println("Computed Name: " + name); + + // 使用 orElseThrow 处理 Optional 为空的情况 + try { + name = optional.orElseThrow(() -> new Exception("Name is missing")); + System.out.println("Name: " + name); + } catch (Exception e) { + System.out.println(e.getMessage()); } + } } + ``` #### 小结