安全地導航容易為空的「Get」呼叫鏈
在複雜的程式碼庫中,連結多個「get」調用可能成為滋生地對於空指針異常。為了防止潛在的 null 值,開發人員經常對每個中間物件進行詳細的 null 檢查。
但是有沒有更優雅、更有效率的方法來處理這種情況?
可選鏈
透過 Java 8 的可選類,我們有一個優雅的解決方案,稱為可選鏈。可選包裝允許我們透過返回一個可選的來優雅地處理空值。值而不是原始 T。
可選鏈可讓您無縫執行一系列 get 調用,將每個調用映射到一個可選值。空檢查在內部處理,確保僅當前面的操作返回非空值時才執行後續操作。
例如,考慮以下「get」呼叫鏈:
house. getFloor(0).getWall(WEST).getDoor().getDoorknob();
為了避免NullPointerExceptions,您可以使用以下null 檢查:
1 | if (house != null && house.getFloor(0) != null && house.getFloor(0).getWall(WEST) != null && house.getFloor(0).getWall(WEST).getDoor() != null) ...
|
登入後複製
但是,使用可選鏈,您可以將其簡化為:
1 2 3 4 5 | Optional.ofNullable(house)
.map(h -> h.getFloor(0))
.map( floor -> floor .getWall(WEST))
.map(wall -> wall.getDoor())
.map(door -> door.getDoorknob());
|
登入後複製
範例
範例用法🎜>
1 2 3 4 5 6 7 8 9 10 11 | System.out.println( "----- Not Initialized! -----" );
Optional.ofNullable( new Outer())
...
.ifPresent(foo -> System.out.println( "foo: " + foo));
System.out.println( "----- Let's Initialize! -----" );
Optional.ofNullable( new OuterInit())
...
.ifPresent(foo -> System.out.println( "foo: " + foo));
|
登入後複製
讓我們用一個範例來說明可選鏈的強大功能:
在此範例中,當初始化物件時,可選鏈會優雅地處理空值,從而成功列印.如果沒有可選鏈,就會發生 NullPointerException。
可選鏈不僅簡化了 null 處理,還提高了程式碼的可讀性和可維護性。透過利用Optional
,您可以安全地導航「get」呼叫鏈,減少顯式空檢查的負擔並增強程式碼庫的整體穩健性。 以上是## 可選鍊是消除鍊式「Get」呼叫中 NullPointerException 的關鍵嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!