是否应该为 Java 枚举定义 null/unknown 值?
当您为接口中可能“未定义”的内容定义枚举时,您应该
- 为此定义一个单独的枚举值,或者
- 只是使用enumValue = null来表示这些情况?
例如
服务X.set价格(价格价格枚举)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
和 priceEnum.UNKNOWN(需要时未知)
或
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
和 priceEnum = null(需要时)?
对此进行一些辩论。我想到的一些要点:
- 使用 Price.UNKNOWN 会保存一些“if (price == null)”代码。您可以在单个开关箱中处理价格 x 的所有值
- 根据视图技术的不同,本地化 Price 可能会更容易。
- 使用Price.UNKNOWN会导致代码IMO中的“幻数”问题。在这里我们有Price.UNKNOWN,其他地方可能是Color.UNDEFINED,Height.NULLVALUE等
- 使用 priceValue = null 与 Java 中其他数据类型的处理方式更加一致。对于未知值,我们有整数 i = null,DomainObject x = null,字符串 s = null,不是吗?
- Price.UNKNOWN 强制您决定是否允许所有用例的空值。我们可能有方法 Price getPrice() 它可能返回 Price.UNKNOWN 和 setPrice(Price p),不允许接受 Price.UNKNOWN。由于 Price.UNKNOWN 始终包含在枚举的值中,因此这些接口看起来有点不干净。我知道 priceValue = null 也有同样的问题(您无法在界面中定义 null 是否被接受),但它感觉更干净一些,误导性也更少(?)