让我们想象一下这种情景:3级Meeting,Room, Projector
会议可能设置了一个房间,里面可能有一个投影仪。
现在假设我想知道投影仪的型号是什么。最自然的事情是做类似的事情
Meeting meeting = someMethod();
return meeting.getRoom().getProjector().getModelName();
Run Code Online (Sandbox Code Playgroud)
此代码可以正确返回投影仪的型号名称,不幸的是,此代码也可能导致异常:java.lang.NullPointerException如果包含在根类 Meeting(甚至 Meeting 类)中的类之一为空。
为了防止这个问题,并在最坏的情况下获得一个默认值,我们应该检查每个调用的返回值。
Meeting meeting = someMethod();
if (meeting != null) {
Room room = meeting.getRoom();
if (room != null) {
Projector projector = room.getProjector();
if (projector != null) {
return projector.getModelName;
}
}
}
return "No Projector Exist";
Run Code Online (Sandbox Code Playgroud)
现在的代码非常糟糕。
处理这种避免 NullPointerException 的链式方法调用的最佳方法是什么?
使用Optional:
return Optional.ofNullable(someMethod())
.map(Meeting::getRoom)
.map(Room::getProjector)
.map(Projector::getModelName)
.orElse("No Projector Exist");
Run Code Online (Sandbox Code Playgroud)
顺便说一句,请考虑返回Optional或null从您的方法中返回- 必须将您String的值与特殊的硬编码值进行比较以检测null案例会变得令人厌烦......
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |