首頁 > Java > java教程 > 主體

Java 8 的可選類別如何簡化連結 Getter 並避免 NullPointerExceptions?

Patricia Arquette
發布: 2024-10-25 12:11:30
原創
785 人瀏覽過

How Can Java 8's Optional Class Simplify Chaining Getters and Avoid NullPointerExceptions?

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

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