當你定義的東西,可以在你的界面是「不確定」的枚舉,你應該是否應該爲Java枚舉定義一個空值/未知值?
- 定義爲一個獨立的枚舉值,或
- 只使用enumValue = NULL對於這種情況?
例如,
serviceX.setPrice(價格priceEnum)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
並在需要時
priceEnum.UNKNOWN或
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
和priceEnum = null當需要?
對此有一點辯論。有一點可以想到:
- 使用Price.UNKNOWN保存了一些「if(price == null)」代碼。您可以處理價格X的所有值在單一的switch-case
- 根據視圖技術,它可能更容易使用Price.UNKNOWN樣的原因代碼「幻數」的問題進行本地化Price.UNKNOWN
- ,IMO 。這裏我們有Price.UNKNOWN,其他地方可能是Color.UNDEFINED,Height.NULLVALUE等
- 使用priceValue = null與Java中處理其他數據類型的方式更加一致。對於未知值,我們有Integer i = null,DomainObject x = null,String s = null,是嗎?
- Price.UNKNOWN強制您決定是否允許所有用例均爲空值。我們可能有方法Price getPrice(),它可能會返回Price.UNKNOWN和setPrice(Price p),它不允許接受Price.UNKNOWN。由於Price.UNKNOWN始終包含在枚舉的值中,因此這些接口看起來有點不潔。我知道priceValue = NULL,則同樣的問題(你不能在接口定義空是否被接受與否),但感覺有點清潔,少一點誤解(?)
你不能在交換機中使用'null',這是一個主要的缺點。 – bestsss
所有的好點。減少空值處理的負擔,並且更具體地說明「空值」意味着什麼是Price.UNKNOWN。另外,關於「空對象模式」的好處,它使得Price.UNKNOWN感覺更像「有效」並且被普遍接受的解決方案。但是,沒有人對Price.UNKNOWN消極方面有同感嗎?我覺得Price.UNKNOWN污染了枚舉的值集。在showAllPrices()中說,我不能枚舉所有的枚舉值,我不得不添加如果(!Price.UNKNOWN),這感覺有點骯髒和「魔法 - 數字」。 – user449236
* @ user449236 *:如果您不想檢查此特殊值,請爲每個枚舉添加一個「顯示」標誌並檢查它。更清潔,更靈活。 –