optional example changed

This commit is contained in:
many2many 2024-10-23 10:36:32 +08:00
parent 2d3ce48146
commit 8364c2fa3b

View File

@ -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<? super T> action)`**: 如果 `Optional` 包含值,则执行 `action`;否则不执行任何操作。
- **`Optional.isPresent()`**: 判断 `Optional` 是否包含值。
- **`Optional.orElse(T other)`**: 如果 `Optional` 包含值,则返回该值;否则返回 `other`
- **`Optional.orElseGet(Supplier<? extends T> other)`**: 如果 `Optional` 包含值,则返回该值;否则返回由 `Supplier` 提供的值。
- **`Optional.orElseThrow(Supplier<? extends X> exceptionSupplier)`**: 如果 `Optional` 包含值,则返回该值;否则抛出由 `exceptionSupplier` 生成的异常。
- **`Optional.ifPresent(Consumer<? super T> action)`**: 如果 `Optional` 包含值,则执行 `action`;否则不执行任何操作。
#### 示例
```java
import java.util.Optional;
import java.util.Random;
/**
* OptionalExample 类演示了 Java Optional 类的多种用法
*/
public class OptionalExample {
/**
* 获取一个随机名字的 Optional 对象
* 有 50% 的概率返回包含 "John Doe" 的 Optional 对象,否则返回空的 Optional 对象
*
* @return Optional<String> 包含名字的 Optional 对象或空的 Optional 对象
*/
private static Optional<String> getName() {
if (new Random().nextBoolean()) {
return Optional.of("John Doe");
} else {
return Optional.empty();
}
}
public static void main(String[] args) {
// 使用Optional.ofNullable封装可能为null的值
Optional<String> optional = Optional.ofNullable(getName());
// 使用ifPresent方法处理Optional中的值
// 获取可能为空的名字用Optional包装以安全地处理空值
Optional<String> optional = getName();
// 使用 ifPresent 方法处理 Optional 中的值
optional.ifPresent(System.out::println);
optional.ifPresent(name -> System.out.println("Name: " + name.toLowerCase()));
// 使用orElse处理Optional为空的情况
// 使用 orElse 处理 Optional 为空的情况
String name = optional.orElse("Default Name");
System.out.println("Name: " + name);
// 使用orElseGet处理Optional为空的情况
name = optional.orElseGet(() -> "Computed Default Name");
// 使用 orElseGet 处理 Optional 为空的情况
name = optional.orElseGet(() -> "Computed Name");
System.out.println("Computed Name: " + name);
// 使用orElseThrow处理Optional为空的情况
// 使用 orElseThrow 处理 Optional 为空的情况
try {
name = optional.orElseThrow(() -> new IllegalArgumentException("Name is missing"));
name = optional.orElseThrow(() -> new Exception("Name is missing"));
System.out.println("Name: " + name);
} catch (IllegalArgumentException e) {
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private static String getName() {
return null; // 或者返回一个实际的值
}
}
```
#### 小结