1. 简介
- Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
- Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
- Optional 类的引入很好的解决空指针异常。
2. ofNullable
如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
3. orElseThrow
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常
public T orElseThrow() {
if (this.value == null) {
throw new NoSuchElementException("No value present");
} else {
return this.value;
}
}
4. 应用案例
@Service
public class LabelServiceImpl implements LabelService {
@Autowired
private LabelDao labelDao;
@Override
public void updateLabel(LabelQo labelQo) {
Optional.ofNullable(labelDao.findById(labelQo.getId()))
.orElseThrow(()->new LabelException("exception.label.data.is.not.exist"));
}
}
public class LabelException extends RuntimeException {
public LabelException(String i18eCode) {
super(I18nUtils.i18n(i18eCode));
}
public LabelException(String i18eCode, Object... args) {
super(I18nUtils.i18n(i18eCode, args));
}
}
5. 应用案例
@Service
public class LabelServiceImpl implements LabelService {
@Autowired
private LabelDao labelDao;
@Override
public void updateLabel(LabelQo labelQo) {
Optional<LabelEntity> labelEntityOptional
= Optional.ofNullable(labelDao.findById(labelQo.getId()));
if(labelEntityOptional.isPresent()){
LabelEntity labelEntity = labelEntityOptional.get();
}else{
throw new LabelException("exception.label.data.is.not.exist");
}
}
}