EnumSet与enum本身一样(都是从Java 5开始),被认为是位字段用例的非共混替代:与位字段一样快速和精益(当然,除了不是原始类型),以及要引导的类型。另一方面,最近也是多年来最受期待的Java - Streams -无耻地为Spliterator的特征使用了位字段。
我是否应该认为以上这些都是核心Java专家明确承认的EnumSet并不那么好呢?我是否应该重新考虑最常见的最佳实践建议,不要使用位域?
发布于 2014-03-23 20:35:00
当看到它使用的是位字段而不是EnumSet时,感到相当惊讶。虽然在这个邮件列表线程。中讨论了rational,但原因似乎是为了能够设置和取消各种特性,而不会影响调用端的特性。使用EnumSet,要实现这一点,每次需要在不同阶段对其进行更改时,都需要创建一个新的EnumSet对象。我想这就是比特场在比赛中获胜的原因。
这句话的最后一句实质上是你在这里提出的问题:
在Java8API中出现这样的标志将会(而且应该)引起很多人的注意,因为它违背了人们已经被告知了十多年的内容。如果按原样采用,最好为文档读者提供一个很好的解释,说明为什么拒绝使用其他选项。“我们对int标志很满意,没有比这更好的了“我们知道int标志对于API不是很好,但是我们非常努力地寻找更好的替代方法,但没有效果”(如果是真的)。
发布于 2014-03-23 20:24:33
我是否应该重新考虑最常见的最佳实践建议,不要使用位域?
是。你应该重新考虑任何包含“总是”或“从不”的建议,不管它是“普通的”还是不那么常见。
https://stackoverflow.com/questions/22596495
复制相似问题