import java.util.Optional;
class C {
public String getInfo() {
return "C's info";
}
}
class B {
private C c;
public C getC() {
return c;
}
}
class A {
private B b;
public B getB() {
return b;
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
// 这里模拟a对象为空的情况
// a = null;
String result = Optional.ofNullable(a)
.map(A::getB)
.map(B::getC)
.map(C::getInfo)
.orElse("default value");
System.out.println(result);
}
}
实现思路
- 使用
Optional.ofNullable
包裹可能为空的A
对象:这样做可以避免A
对象为空时直接调用getB()
方法抛出NullPointerException
。
- 使用
map
方法进行链式调用:map
方法会对Optional
中包含的值应用给定的函数。在这里,依次通过map
调用A
对象的getB()
方法、B
对象的getC()
方法和C
对象的getInfo()
方法。如果任何一个map
操作中的对象为空(即Optional
中不包含值),map
操作会返回一个空的Optional
,并不会抛出空指针异常。
- 使用
orElse
方法返回默认值:如果整个链式调用过程中任何一个对象为空,最终的Optional
将不包含值,此时调用orElse
方法会返回传入的默认值。这样就实现了安全调用多层嵌套对象的方法,并在对象为空时返回默认值。