首頁 > Java > java教程 > 主體

如何優雅地處理 Getter 鏈中的空檢查:Optional 與 Demeter 法則?

Susan Sarandon
發布: 2024-10-27 07:23:29
原創
358 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!