作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
当您为接口(interface)中可能“未定义”的事物定义枚举时,您是否应该
例如,
serviceX.setPrice(Price priceEnum)
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN
}
和 priceEnum.UNKNOWN 在需要时
或
enum Price {
CHEAP, EXPENSIVE, VERRRY_EXPENSIVE
}
需要时 priceEnum = null?
对此进行了一些辩论。想到的几点:
最佳答案
这实际上是一个应用 Null Object pattern 的例子.恕我直言,拥有一个虚拟对象而不是空对象总是更好。例如,您可以向空对象添加虚拟方法,而不是将代码分散在各处进行空检查。很方便。
enum
的名称也为您提供了一些额外的语义:价格是 unknown,undefined,而不是 trustworthy,还不知道?如果价格为 null 是什么意思?
更新:正如 Aaron Digulla 指出的,空对象模式需要内存。但实际上大多数时候情况并非如此。在传统的实现中,您通常会在任何地方使用 Null 对象的单例,因为不需要单独的实例。使用枚举会变得更好,因为您可以免费获得单例语义。
另一点是 null
引用和对某个对象的引用占用相同数量的内存(比如 32 位机器上的 4 个字节)。正是被引用的对象占用了一些额外的内存。但如果这是一个单例,这里几乎没有内存开销。
关于java - 您是否应该为 Java 枚举定义一个空值/未知值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7144541/
我是一名优秀的程序员,十分优秀!