gpt4 book ai didi

java - 在现代 Java 8 API 中使用位域而不是 EnumSet 的理由

转载 作者:IT老高 更新时间:2023-10-28 20:53:42 26 4
gpt4 key购买 nike

EnumSet,与 enum 本身一样古老(都是从 Java 5 开始),应该是位域用例的不折不扣的替代品:既快又精简作为位域(好吧,除了不是原始类型),并且可以安全引导。另一方面,最近和多年来最受期待的 Java API — Streams API — 毫不掩饰地为 Spliteratorcharacteristics 使用位域。 .

我是否应该将以上内容视为核心 Java 专家明确承认 EnumSet 毕竟不是那么好?我是否应该重新考虑永远不要使用位域的常见最佳实践建议?

最佳答案

很惊讶地看到它使用的是位域而不是 EnumSet。理性在 this mailing list thread. 中讨论。似乎原因是能够设置和取消设置各种特性而不影响调用方的特性。使用 EnumSet,要实现这一点,每次需要在不同阶段更改它时,都需要创建一个新的 EnumSet 对象。我想这就是位域在那里赢得比赛的原因。

该线程的结论基本上预测了您的问题:

The presence of such flags in a Java 8 API would (and should) raise a lot of eyebrows, because it goes against what people have been told for well over a decade. If it's adopted as is, there had better be a good explanation for doc readers of why alternatives were rejected. "We were comfortable with int flags and nothing else significantly better suggested itself" won't cut it. "We know int flags aren't great for an API, but we tried very hard to find better alternatives, to no avail" would (if it were true).

关于java - 在现代 Java 8 API 中使用位域而不是 EnumSet 的理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com