链接 getter 并处理 NullPointerExceptions
执行一系列 getter 调用以从嵌套对象中检索数据时,有必要执行 null 检查以避免 NullPointerExceptions。在处理多个级别的对象时,这很快就会变得冗长和笨拙。
嵌套 If 语句
一种常见的方法是嵌套 if 语句,检查 if 语句中的每个对象在继续之前链为 null。然而,这种方法可能会变得笨重且难以维护。
违反德米特定律 (LoD)
这种方法违反了德米特定律 (LoD) ,它规定方法只能在它们直接引用的对象上调用其他方法。通过访问超出其直接上下文的对象,此方法违反了所涉及的类的封装。
使用Optional (Java 8)
幸运的是,Java 8 引入了Optional 类,它提供了一种更优雅且类型安全的方式来处理 getter 链中的 null 值。 Optional 表示一个可能为 null 的值,并提供映射和过滤它所包含的值的方法。
使用Optional.ofNullable链式获取器
要使用Optional链接getter,只需调用链中第一个对象上的Optional.ofNullable()。这将创建一个表示值或 null 的可选对象。然后,您可以链接 map() 操作以对值应用 getter 调用,Optional 将自动处理 null 检查。
<code class="java">Optional<Doorknob> doorknob = Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floorZero -> floorZero.getWall(WEST)) .map(wallWest -> wallWest.getDoor()) .map(door -> door.getDoorknob());</code>
安全和封装
This方法不仅简化了代码,而且保证了类型安全。如果您尝试访问它表示的值而不先检查它是否为空,Optional 类将引发异常。此外,它维护了所涉及的类的封装,因为您只能直接访问所引用的对象上的方法。
结论
虽然有时可能需要违反 LoD,通常建议在链接 getter 时避免过度嵌套 if 语句。相反,请考虑使用Optional类以更优雅和类型安全的方式处理空值。
以上是Java 8 的可选类如何简化链接 Getter 并避免 NullPointerExceptions?的详细内容。更多信息请关注PHP中文网其他相关文章!