首頁  >  文章  >  Java  >  ## 可選鍊是消除鍊式「Get」呼叫中 NullPointerException 的關鍵嗎?

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

Linda Hamilton
Linda Hamilton原創
2024-10-26 02:29:02641瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn