首頁 > Java > java教程 > 主體

## 可選鍊是消除鍊式「Get」呼叫中 NullPointerException 的關鍵嗎?

Linda Hamilton
發布: 2024-10-26 02:29:02
原創
649 人瀏覽過

## Are Optional Chains the Key to Eliminating NullPointerExceptions in Chained

安全地導航容易為空的「Get」呼叫鏈

在複雜的程式碼庫中,連結多個「get」調用可能成為滋生地對於空指針異常。為了防止潛在的 null 值,開發人員經常對每個中間物件進行詳細的 null 檢查。

但是有沒有更優雅、更有效率的方法來處理這種情況?

可選鏈

透過 Java 8 的可選類,我們有一個優雅的解決方案,稱為可選鏈。可選包裝允許我們透過返回一個可選的來優雅地處理空值。值而不是原始 T。

可選鏈可讓您無縫執行一系列 get 調用,將每個調用映射到一個可選值。空檢查在內部處理,確保僅當前面的操作返回非空值時才執行後續操作。

例如,考慮以下「get」呼叫鏈:

house. getFloor(0).getWall(WEST).getDoor().getDoorknob();

為了避免NullPointerExceptions,您可以使用以下null 檢查:

if (house != null && house.getFloor(0) != null && house.getFloor(0).getWall(WEST) != null && house.getFloor(0).getWall(WEST).getDoor() != null) ...
登入後複製

但是,使用可選鏈,您可以將其簡化為:

Optional.ofNullable(house)
    .map(h -> h.getFloor(0))
    .map(floor -> floor.getWall(WEST))
    .map(wall -> wall.getDoor())
    .map(door -> door.getDoorknob());
登入後複製

範例

範例用法🎜>
System.out.println("----- Not Initialized! -----");

Optional.ofNullable(new Outer())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: " + foo)); //no print

System.out.println("----- Let's Initialize! -----");

Optional.ofNullable(new OuterInit())
    ... // Omitted chain of optional maps
    .ifPresent(foo -> System.out.println("foo: " + foo)); //will print!
登入後複製
讓我們用一個範例來說明可選鏈的強大功能:

在此範例中,當初始化物件時,可選鏈會優雅地處理空值,從而成功列印.如果沒有可選鏈,就會發生 NullPointerException。

可選鏈不僅簡化了 null 處理,還提高了程式碼的可讀性和可維護性。透過利用Optional,您可以安全地導航「get」呼叫鏈,減少顯式空檢查的負擔並增強程式碼庫的整體穩健性。

以上是## 可選鍊是消除鍊式「Get」呼叫中 NullPointerException 的關鍵嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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