前言
Java世界中最为常见的异常就是npe了,所以使用对象前对对象判空是保证代码鲁棒性的重要保证,因此在jdk7之前我们经常写出这样的代码:
if (someObject != null) {
if (someObject.someField != null) {
if (someObject.someField.someField != null) {
Systemout.println(someObject.someField.someField)
}
}
}
代码逻辑虽然不复杂但是过于繁复,于是在jdk8提供了一个新的特性Optional,结合lambda表达式可以极大地简化我们的判空操作,先来看看使用Optional如何重构上面那一段代码
Optional.ofNullable(someObject).map(SomeObject::getSomeField).map(SomeField::getSomeField).ifPresent(System.out::println);
可以看到借助于lambda表达式,之前的多重嵌套的判空操作只需要一行代码就可以完成。
再来看看通过Optional规避集合越界的代码
List list = new ArrayList();
Optional.ofNullable(list).filter(e -> e.size() > 0).map(e -> e.get(1)).ifPresent(System.out::println);
这里是有了Optional中的filter操作符,只有符合lambda表达式条件的元素才不会被过滤进入下一个操作符map,因此长度不符合要求的数组根本不会被取值。
除了上述的map,filter和isPresent操作符,Optional还提供了一系列其他的常用操作符。
Optional操作符
1 ofNullable
传入的对象可以为null
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
2 of
传入的对象不可以为null,否则抛出NullPointerException
public static