枚举vs int标志?
我很怀疑你会看到性能好处 - 在某些情况下甚至会出现性能下降,这取决于你如何使用它们。我怀疑他们会很重要。
好处不在于性能方面 - 它更清楚地表达或表达您的意图,从而提高可读性(和类型安全性)的代码。例如,对于整数标志,如果您尝试在方法调用中使用(比如说)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
除了类型安全的代码,你有一个参考共享集合(可重用性)
使用位掩码标志的相当于是使用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
你说什么语言呢?例如,在C#中它们是一样的。 – 2011-02-24 17:07:30