簡體   English   中英

最佳實踐:Java屬性可能為null

[英]Best Practice: Java attributes might be null

因此,我有一個帶有5個不同變量的構造函數,其中三個可能為null。 它接受用戶輸入,並且用戶不必為五個屬性中的三個輸入任何內容。
因此,如果用戶未輸入任何內容,則對所有缺失值使用null創建對象。

obj = new Object(String, null, null, null, String);

現在,我想知道什么是最佳做法來應對這一問題。
我可以想到三種不同的情況:

  • 僅使用構造函數在類中進行處理,即始終查詢值是否為空(例如if(getSomeAttribute == null) { //do something }
  • 在對象類中處理它,即始終為每個缺少的屬性返回一些默認值,而不是null
  • 在對象lcass中處理它,即具有isAttributeSet()類的輔助方法,返回一個布爾值,指示是否設置了屬性,即:不為null。

盡管我對后兩個有問題,但我認為我可能會遇到默認值問題,因為有時可能很難知道它是否是默認值。 如果我總是檢查的話,我也可以檢查null而不是先插入默認值;
與最后一個相同,如果我必須檢查輔助方法,那么我也可以直接檢查null。

我在這種情況下的問題是,有時我可能不是使用getter和setter方法的人。 使用它的人應該如何知道可能存在null屬性以及哪些屬性為null。
我知道,我應該在我的對象類中對此進行記錄,但是我仍然想知道是否存在“最佳實踐”方法來解決此問題。
我認為總是檢查紀錄片(如果沒有的話,整個班級)是否如此簡單是不尋常的。
也許我什至不應該首先從我​​的構造函數中的空值開始? 但是我想無論如何我都會遇到同樣的問題,所以那並不能真正解決我的問題

閱讀Bloch,Effective Java,第二版。 項目2:“面對許多構造函數參數時,請考慮構建器。”

一本好書中的出色建議。

使用構建器模式將對構造函數有所幫助,但是主要問題是與類的設計有關–您要確保在調用get / set方法時,該方法不是null / optional成員之一。

您可以使用多態性來使兩個對象每個都有一個接口,該接口僅公開具體實現所支持的getter和setter。 這使得不可能稱呼錯誤的獲取者/設定者,並且意圖是顯而易見的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM