【发布时间】:2012-07-08 18:04:52
【问题描述】:
在阅读了一些关于 enum 的问题和答案后,我发现它并没有真正有用...
它介于类和变量之间,但我知道在哪里可以使用它,因此它比一个类或几个变量更有用。
【问题讨论】:
在阅读了一些关于 enum 的问题和答案后,我发现它并没有真正有用...
它介于类和变量之间,但我知道在哪里可以使用它,因此它比一个类或几个变量更有用。
【问题讨论】:
还有其他你可以做的事情以及使用它们的原因,但我使用枚举的主要原因是防止出现无效参数的可能性。例如,想象以下方法:
public void doSomethingWithAMonth(int monthNum);
这不仅是模棱两可的(月份索引是从 1 开始,还是从 0 开始?),而且您可以给出完全无效的数据(13+,负数)。如果你有一个枚举 Month 与 JAN、FEB 等,签名变为:
public void doSomethignWithAMonth(Month month);
调用此方法的代码可读性更高,并且不会提供无效数据。
【讨论】:
我将枚举用于任何具有多个不变“类型”的事物。即一周中的几天。
在这种情况下我为什么不使用 String 是因为我不能在 String 上执行 switch 语句,而我可以在 Enum 上执行,所以一周中的每一天我都可以做一些特定的事情。
我在处理单例模式时也使用 Enum,检查 Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),引用:
“虽然这种方法尚未广泛应用 采用,单元素枚举类型是实现单例的最佳方式。” 不会粘贴代码阅读这本书非常好。
如果我是你,我会首先阅读Thinking in java 枚举类型一章。然后在 Effective Java 第 6 章之后,你应该会很好
【讨论】:
最简单的定义 - An enum is just like any other class, with a predefined set of instances.
枚举最好的部分是它可以在我们不能使用字符串的 switch 语句中使用。
并且 Enum 是一种安全类型,因此您不能在运行时分配新值。
【讨论】:
switch 语句中使用 Strings。 docs.oracle.com/javase/7/docs/technotes/guides/language/…
enum 强制编码人员从预定义的实体或概念列表中进行选择。虽然您可以通过类或将变量设置为特定的已知值来实现相同的目标,但枚举不易出错,因为它宣传并强制执行一个菜单,值的设置者可以从中选择。
【讨论】:
枚举有助于防止人们做他们不应该做的事情。例如,如果我有:
public final static int WEATHER_SUNNY = 0;
public final static int WEATHER_RAINY = 1;
public final static int WEATHER_HAIL = 2;
那么我可以这样做:MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL 这没有任何意义。这就是为什么最好有一个 Weather 枚举。这使代码更具可读性,并且不允许将两个天气整数相加。
【讨论】:
我会在其他答案中添加枚举是只有固定数量实例的类。这些实例可能具有字段和方法,并且可以用作任何其他 Java 对象。例如,Month 枚举可以定义类似
public int getNumberOfDays(int year);
public boolean isFirstOfYear();
【讨论】:
从名称“enum”开始,它非常适合用于提供扩展功能的枚举常量。例如,您可以存储一些由多个参数组成的常量,例如:constantId、constanNameString、附加参数。此外,枚举可以包含函数。
枚举的一个奇特用途是创建一个单例。
【讨论】:
当您有一个功能重要且有限的值列表时,枚举很有用。
例如,您需要使用一周中的某一天:不会添加另一天,您宁愿在代码中使用 Day.MONDAY 而不是数字,并且必须记住 0 是星期一,1是星期二等等。 它也使 switch 语句更容易理解,带有:
Switch(day) {
case Monday : ... break;
case Tuesday : ... break
etc.
}
【讨论】:
除其他外,枚举对于创建单例很有用:
What is an efficient way to implement a singleton pattern in Java?
【讨论】: