链接 Getter 并处理 NullPointerExceptions
执行一系列 getter 调用以从嵌套对象中检索数据时,有必要执行 null 检查以避免 NullPointerExceptions。在处理多个级别的对象时,这很快就会变得冗长和笨拙。
嵌套 If 语句
一种常见的方法是嵌套 if 语句,检查在继续之前链为 null。然而,这种方法可能会变得笨重且难以维护。
打破德米特定律 (LoD)
这种方法违反了德米特定律 (LoD) ,它规定方法只能调用它们直接引用的对象上的其他方法。通过访问超出其直接上下文的对象,此方法违反了所涉及的类的封装。
使用Optional (Java 8)
幸运的是,Java 8 引入了Optional 类,它提供了一种更优雅且类型安全的方式来处理 getter 链中的 null 值。 Optional 表示可能为 null 的值,并提供映射和过滤其包含的值的方法。
使用Optional.ofNullable 链式获取器
要使用Optional 链式获取器,只需调用链中第一个对象上的Optional.ofNullable()。这将创建一个表示值或 null 的可选对象。然后,您可以链接 map() 操作以将 getter 调用应用于该值,Optional 将自动处理 null 检查。
Optional doorknob = Optional.ofNullable(house)
.map(house -> house.getFloor(0))
.map(floorZero -> floorZero.getWall(WEST))
.map(wallWest -> wallWest.getDoor())
.map(door -> door.getDoorknob());
安全与封装
这种做法不仅简化了代码,还保证了类型安全。如果您尝试访问它表示的值而不先检查它是否为空,Optional 类将引发异常。此外,它维护了所涉及的类的封装,因为您只能直接访问您引用的对象上的方法。
结论
虽然有时可能需要违反 LoD,通常建议在链接 getter 时避免过度嵌套 if 语句。相反,请考虑使用Optional类以更优雅和类型安全的方式处理空值。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3