Optional类
Java8提供了一个Optional类,它可以看作一个返回值的“容器”,用于更好的表达某个值存在或不存在。Optional类常用于优化空指针处理的代码逻辑。
Optional类使用实例
假设我们有如下这样一段代码逻辑,我们在repository中调用queryComponentByName()方法来查询一个组件,如果查到返回组件对象,查不到则返回null。接下来我们要调用组件的execute()方法,如果上一步没有查到组件,则创建一个默认组件并调用其中的方法。
package com.gacfox.demo;
public class Main {
public static void main(String[] args) {
MyRepository repository = new MyRepository();
Component component = repository.queryComponentByName("DemoComponent");
if (component != null) {
component.execute();
} else {
Component defaultComponent = new DefaultComponent();
defaultComponent.execute();
}
}
}
显然,在第二步中我们要用if (component != null) { ... }进行判断,然后进行对应处理,还是比较麻烦的,使用Optional能够简化这一逻辑。
MyRepository.java
package com.gacfox.demo;
import java.util.Optional;
public class MyRepository {
public Optional<Component> queryComponentByName(String name) {
// 具体查询逻辑 ...
return Optional.ofNullable(component);
}
}
Main.java
package com.gacfox.demo;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
MyRepository repository = new MyRepository();
Optional<Component> component = repository.queryComponentByName("DemoComponent");
component.orElse(new DefaultComponent()).execute();
}
}
代码中,我们的MyRepository没有直接返回Component对象,而是使用Optional类进行了一步封装。Main.java中取用时,使用了Optional的orElse方法,它封装了如果Optional对象内部为空时就使用参数传入的默认对象的逻辑,简化了代码的编写。
Optional类常用方法
| 方法 | 说明 |
|---|---|
| Optional.of(T t) | 创建包含对象的Optional实例,t不可为null |
| Optional.empty() | 创建空的Optional实例 |
| Optional.ofNullable(T t) | 若t不为null,创建包含t的Optional实例,否则创建空实例(常用) |
| optional.isPresent() | 判断Optional对象中是否包含值 |
| optional.orElse(T t) | Optional对象中包含值时返回该值,否则返回t |
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。