@Data
public class A {
private B b;
@Data
private static class B {
String name;
}
}
如果有对象a,想要获取属性b的name,未必避免NPE,则需要如下检查:
if (a != null) {
if (a.getB() != null) {
System.out.println(a.getB().getName());
}
}
很啰嗦,如果嵌套更多则更繁琐,通过Optional实现则方便很多:
public static void main(String[] args) {
A a = null;
System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null)); // null
a = new A();
System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null));// null
System.out.println(Optional.ofNullable(a.getB()).map(B::getName).orElse(null));// null
B b = new B();
b.setName("bbb");
a.setB(b);
System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null));// bbb
}