Mar*_*nik 19 java enumset bit-fields java-8
EnumSet,就像enum它自身一样古老(自Java 5开始),应该是比特场的用例的非妥协替代品:像位域一样快速和精简(好吧,除了不是原始类型),以及类型安全的启动.另一方面,最新和多年来最受期待的Java API-Streams API - 毫不掩饰地使用了bitfields Spliterator的特性.
我是否应该认为上述内容是核心Java专家的明确承认,EnumSet毕竟不是那么好?我是否应该重新考虑从不使用位域的常见最佳实践建议?
Roh*_*ain 21
相当惊讶地发现它使用的是bitfield而不是EnumSet.在这个邮件列表线程中讨论了理性.似乎原因是能够设置和取消设置各种特性而不影响呼叫者端的特征.使用a EnumSet来实现这一点,EnumSet每当需要在不同阶段更改它时,就需要创建一个新对象.我想这就是为什么比特场在那里赢得比赛的原因.
该主题的结束语主要在此预测您的问题:
Java 8 API中存在这样的标志会(并且应该)引起很多人的关注,因为它违背了十多年来人们所说的话.如果按原样采用,那么对于文档读者来说,最好能够解释为什么替代方案被拒绝."我们对int旗帜很满意,没有其他任何明显更好的建议"它不会削减它."我们知道int标志对于API来说不是很好,但我们很难找到更好的替代品,但无济于事"(如果确实如此).