Optional的用法
时间: 2024-05-02 18:18:43 浏览: 7
1. Optional 作为方法返回值
方法的返回值可以是 Optional 类型,表示该方法可能返回一个非空值,也可能返回一个空值。使用 Optional 作为返回值类型,可以更好地表达方法的含义,避免了 null 值的混乱。
例如,下面的方法返回一个 Optional 类型的字符串:
```
public Optional<String> getString() {
if (someCondition) {
return Optional.of("some string");
} else {
return Optional.empty();
}
}
```
2. Optional 的创建
Optional 类提供了多种创建 Optional 对象的方式,包括 of、ofNullable 和 empty。
- of:创建一个包含非空值的 Optional 对象,如果传入的值为 null,则会抛出 NullPointerException 异常。
```
Optional<String> optional = Optional.of("some value");
```
- ofNullable:创建一个 Optional 对象,可以包含 null 值。
```
Optional<String> optional = Optional.ofNullable(null);
```
- empty:创建一个不包含值的 Optional 对象。
```
Optional<String> optional = Optional.empty();
```
3. Optional 的使用
Optional 对象可以通过 isPresent 方法判断是否包含值,如果包含值,则可以通过 get 方法获取该值,如果不包含值,则可以通过 orElse 方法指定一个默认值。
```
Optional<String> optional = Optional.of("some value");
if (optional.isPresent()) {
String value = optional.get();
// do something with value
} else {
String defaultValue = "default value";
// do something with defaultValue
}
```
```
Optional<String> optional = Optional.empty();
String value = optional.orElse("default value");
// value = "default value"
```
4. Optional 的链式调用
Optional 对象可以通过链式调用的方式进行操作,避免了多次判断 null 值的情况。例如,下面的代码使用链式调用的方式获取一个 Person 对象的城市名称:
```
class Person {
private String name;
private Address address;
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
}
class Address {
private String city;
public String getCity() {
return city;
}
}
Optional<Person> optional = Optional.of(new Person());
String city = optional.map(Person::getAddress)
.map(Address::getCity)
.orElse("unknown");
```
如果 Person 对象或 Address 对象为 null,或者城市名称为空,则会返回默认值 "unknown"。