Optional 类 理解及应用
时间: 2024-03-15 22:43:59 浏览: 29
理解:
`Optional` 类是一个容器对象,可以包含一个非空的对象或者表示空对象。它的主要作用是用于解决 Java 中常见的空指针异常问题。使用 `Optional` 可以使代码更加简洁易读,同时也能够帮助开发者避免空指针异常的问题。
应用:
1. 防止空指针异常
在调用某个方法返回的结果可能为 null 的情况下,可以使用 `Optional` 对象对该结果进行封装,避免出现空指针异常的情况。
例如:
```
String str = null;
Optional<String> optional = Optional.ofNullable(str);
System.out.println(optional.orElse("default"));
```
在这个例子中,使用 `Optional.ofNullable()` 方法对 `str` 进行封装,然后在调用 `orElse()` 方法时,如果 `optional` 对象中包含非空值,则返回该值,否则返回 "default"。
2. 链式调用
`Optional` 类提供了很多便捷的方法,可以方便地进行链式调用,例如 `map()`、`flatMap()`、`filter()` 等方法。这些方法可以使代码更加简洁易读。
例如:
```
Optional<String> optional = Optional.ofNullable("hello world");
optional.map(String::toUpperCase).ifPresent(System.out::println);
```
在这个例子中,使用 `map()` 方法将 `optional` 对象中的字符串转换为大写字母,然后使用 `ifPresent()` 方法将结果输出到控制台。
3. 减少 null 检查
在以前的 Java 版本中,经常需要对返回值进行 null 检查,以避免出现空指针异常的情况。而使用 `Optional` 可以减少这种检查的代码。
例如:
```
public String getValue(String key) {
if (key == null) {
return null;
}
// code ...
}
```
使用 `Optional` 可以改写为:
```
public Optional<String> getValue(String key) {
// code ...
return Optional.ofNullable(result);
}
```
在调用 `getValue()` 方法时,可以使用链式调用进行处理,例如:
```
String result = getValue("key").map(String::toUpperCase).orElse("default");
```
这个例子中,如果 `getValue()` 方法返回的结果为 null,则使用 "default" 作为默认值,否则将结果转换为大写字母。