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