回答
我很怀疑你会看到性能好处 - 在某些情况下甚至会出现性能下降,这取决于你如何使用它们。我怀疑他们会很重要。
好处不在于性能方面 - 它更清楚地表达或表达您的意图,从而提高可读性(和类型安全性)的代码。例如,对于整数标志,如果您尝试在方法调用中使用(比如说)HTTP_STATUS_UNAUTHORIZED作为文件共享模式的值,则没有任何事情会抱怨...但是如果这两者都是枚举,则该参数将被强制键入为真的只允许文件共享模式(或空,假设你是谈论Java)。
谢谢您的回复;并注意到。 – AedonEtLIRA 2011-02-24 17:45:20
枚举更清晰地表达你正在尝试做什么。使用它们,不用担心性能;性能影响可以忽略不计。
它们基本上是一样的东西,除非枚举是自我记录的。我建议一旦其他人可能与您的代码联系,就使用枚举。
Java枚举与整数非常不一样。他们比这更强大(而且比大多数其他语言中的枚举更强大)。 – 2011-02-24 17:11:06
你说得对,他们更强大,是类型安全的。我可能没有充分表达的是,用枚举明显替换int标志将产生相同的结果,除了以更可读的方式。 – 2011-02-24 17:14:41
一个Enum类型有自己的方法和optimized containers。你应该比int标记更喜欢它,因为它更安全并且可能更有效率(尽管我怀疑它中有很多!)。
除了类型安全的代码,你有一个参考共享集合(可重用性)
使用位掩码标志的相当于是使用EnumSet(这恰好使用位面罩)
enum Colour { RED, GREEN, BLUE }
Set<Colour> colours = EnumSet.noneOf(Colour.class);
colours.add(Colour.RED);
colours.add(Colour.GREEN);
if (colours.contains(Colour.RED)) // true
System.out.println(colours+" contains RED");
if (colours.contains(Colour.BLUE)) // false
像往常一样,Effective Java最好说它:使用该int
枚举 模式
程序是易碎的。因为
int
枚举是编译时常量,所以它们 被编译到使用 它们的客户端中。如果与 枚举常量关联的int
更改了,则必须重新编译其客户端 。如果它们不是, 它们仍然会运行,但它们的 行为将是未定义的。有 不容易的方法将
int
枚举 常量转换成可打印的字符串。如果 您打印这样一个常数或从调试器显示它 ,你看到的只是一个 数字,这不是很有帮助。 有迭代 在所有int
枚举常数在 基,或甚至以获得 一个int
枚举组大小没有可靠的方法。
(+ 10多页的为什么枚举更好:-))
谢谢你,这是高度描述性的。 – AedonEtLIRA 2011-02-24 19:20:43
- 1. C#的int标志枚举
- 2. 标志,枚举(C)
- 3. 大标志枚举
- 4. 地图枚举为[标志]枚举
- 5. 标志枚举属性
- 6. C#枚举标志比较
- 7. 绑定标志枚举XAML
- 8. JavaScript:枚举标志检查
- 9. F#位标志枚举
- 10. 枚举VS查找表VS枚举反射VS State模式
- 11. Serialize枚举为int
- 12. 获取枚举标志的所有枚举名称
- 13. 标志枚举和相互排斥枚举重叠的意思
- 14. 存储int显示标签?枚举
- 15. 枚举VS在d
- 16. 问题与枚举为标志
- 17. 枚举具有标志属性
- 18. C#标志枚举分隔符
- 19. 什么是TypeScript中的枚举标志?
- 20. 映射标志枚举数组
- 21. 标志数是两个变量枚举
- 22. 标志枚举的二进制操作
- 23. 迭代标志枚举中的值?
- 24. 的XElement使用标志枚举
- 25. NHibernate的QueryOver由枚举标志
- 26. 带名称的枚举标志
- 27. 看不惯枚举标志与0X2值
- 28. C#具有标志的枚举属性
- 29. 测试枚举标志的区别?
- 30. 非二进制枚举标志
你说什么语言呢?例如,在C#中它们是一样的。 – 2011-02-24 17:07:30