以前,判断字段为空抛出异常时,我的代码是这样的
示例一:
示例二:
嗯,虽然好理解,但是感觉有点low
后来,猛然看到同事代码中使用Optional判断,简直好用多了
Optional 类Java 8 引入的一个特性 ,Optional 类主要解决的问题是比较常见的空指针异常(NullPointerException)
所以,上面的逻辑可以改成如下:
示例一优化: 对象为null,抛出异常
示例二优化: 对象不为null,执行{}中的逻辑
看了下底层,就是一个老三元,ofNullable(value) 就是判断value 是否 null
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
//Returns an Optional with the specified present non-null value.
//Params:value – the value to be present, which must be non-null
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
//如果对象不是空的,就对执行传入的 Lambda 表达式
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
当然还有其他的方法,使用时可根据需求选择用哪个方法!
猛然想到一个问题,怎么没有如果对象为空以及不为空,类似于if…else…的方法,原来JDK1.9后才对Optional这个方法进行了改进,增加了ifPresentOrElse方法 等同于if else,我当前使用的的是1.8,原来如此。。。。
Optional.ofNullable(object).ifPresentOrElse(obj -> {
//如果对象不为空,执行逻辑
.....
}, () -> {
//如果对象为空,执行逻辑
.....
});
注意: Optional.isNotNull只能对可能为null的对象进行判断,如果是字符串还是老老实实用StringUtils的方法进行判断吧!