https://blog.csdn.net/qq_27818541/article/details/117262880
Optional的用法
如果 `Inner` 类里面还有更深层次的嵌套,例如两层或更多,你可以继续使用 `Optional` 的 `flatMap` 和 `map` 方法来安全地访问这些深层次的字段。`flatMap` 是用来处理嵌套的 `Optional` 对象,而 `map` 用于处理最终的值。每次使用 `flatMap` 都是为了避免空引用,并将嵌套的对象“展平”为一个 `Optional`。
假设我们有如下的类结构:
```java
public class Outer {
private Inner inner;
// getters and setters...
}
public class Inner {
private Nested nested;
// getters and setters...
}
public class Nested {
private String value;
// getters and setters...
}
```
现在,要安全地访问 `Outer` 对象中 `Nested` 类的 `value` 字段,可以这样做:
```java
Optional<Outer> outer = ...
String value = outer
.flatMap(o -> Optional.ofNullable(o.getInner()))
.flatMap(i -> Optional.ofNullable(i.getNested()))
.map(n -> n.getValue())
.orElse("默认值"); // 如果任何一层为空,使用默认值
```
在这个例子中:
- 第一个 `flatMap` 处理从 `Outer` 到 `Inner` 的转换。
- 第二个 `flatMap` 处理从 `Inner` 到 `Nested` 的转换。
- `map` 方法用于获取 `Nested` 对象中的 `value` 字段值。
- 如果中间的任何一个对象是 `null`,`orElse` 方法提供了一个默认值。
这种方法使代码保持清晰和简洁,同时有效地避免了空指针异常。通过逐层“展平”嵌套的 `Optional` 对象,你可以安全地访问深层次的字段。