mirror of
https://gitee.com/many2many/java-web.git
synced 2025-01-11 14:40:55 +08:00
optional example changed
This commit is contained in:
parent
2d3ce48146
commit
8364c2fa3b
@ -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 {
|
||||
public static void main(String[] args) {
|
||||
// 使用Optional.ofNullable封装可能为null的值
|
||||
Optional<String> 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<String> 包含名字的 Optional 对象或空的 Optional 对象
|
||||
*/
|
||||
private static Optional<String> 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<String> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
#### 小结
|
||||
|
Loading…
Reference in New Issue
Block a user