前言
NullPointerException异常在Java中非常常见。所以,我们必须做一些事情来防止NullPointerException异常。做法当然添加null检查。本文将介绍,如何利用像 Lambda 表达式这样的 Java 8 新特性来编写null 检查的几个技巧。
技巧一:Optional类型
class Outer {
Nested nested;
Nested getNested() {
return nested;
}
}
class Nested {
Inner inner;
Inner getInner() {
return inner;
}
}
class Inner {
String foo;
String getFoo() {
return foo;
}
}
//解决这种结构的深层嵌套是有点麻烦的,必须编写一堆 null 检查来确保不会发生NullPointerException
Outer outer = new Outer();
if (outer != null && outer.nested != null && outer.nested.inner != null) {
System.out.println(outer.nested.inner.foo);
}
Optional.of(new Outer())
.map(Outer::getNested)
.map(Nested::getInner)
.map(Inner::getFoo)
.ifPresent(System.out::println);
Outer obj = new Outer();
resolve(() -> obj.getNested().getInner().getFoo());
.ifPresent(System.out::println);
public static <T> Optional<T> resolve(Supplier<T> resolver) {
try {
T result = resolver.get();
return Optional.ofNullable(result);
}
catch (NullPointerException e) {
return Optional.empty();
}
}