首页  >  文章  >  Java  >  如何优雅地处理 Getter 链中的空检查:Optional 与 Demeter 法则?

如何优雅地处理 Getter 链中的空检查:Optional 与 Demeter 法则?

Susan Sarandon
Susan Sarandon原创
2024-10-27 07:23:29352浏览

How to Gracefully Handle Null Checks in Getter Chains: Optional vs. Law of Demeter?

Getter 调用链中空检查的优雅处理

在软件开发中,经常会遇到需要链式 getter 的情况调用,例如:

<code class="java">house.getFloor(0).getWall(WEST).getDoor().getDoorknob();</code>

但是,如果链上的任何对象为 null,则此类链可能容易受到 NullPointerExceptions 的影响。为了防止这种情况,开发人员经常采用冗长的 if-null 检查,增加不必要的复杂性和代码重复。

替代方法

虽然没有超出- Java 中的 the-box 实用程序类来处理这个问题,有一些优雅的替代方案:

违反 Demeter 定律

根据 @Erwin Bolwidt 的建议,你可以打破德米特法则 (LoD) 并直接访问嵌套属性:

<code class="java">if (house != null && house.floors != null && house.floors[0] != null && house.floors[0].walls != null && house.floors[0].walls[WEST] != null) ...</code>

不鼓励这种方法,因为它违反了封装原则并增加了代码复杂性。

Java 8 可选

Java 8 引入了Optional 类型,它允许您更优雅地处理null。您可以将每个 getter 调用包装在Optional中:

<code class="java">Optional.ofNullable(house)
        .map(house -> house.getFloor(0))
        .map(floor -> floor.getWall(WEST))
        .map(wall -> wall.getDoor())
        .map(door -> door.getDoorknob());</code>

这种方法消除了显式空检查的需要,并提供了更简洁和更具表现力的语法。

结论

虽然没有内置实用程序用于检查 getter 链中的空值,但可选类型和违反 Demeter 定律提供了灵活且依赖于上下文的解决方案。选择最佳方法取决于具体场景和项目的设计原则。

以上是如何优雅地处理 Getter 链中的空检查:Optional 与 Demeter 法则?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn