在阅读了一些关于枚举的问题和答案后,我发现它并没有真正有用......
它介于类和变量之间,但我知道我可以在哪里使用它,所以它会比一个类或几个变量更有用。
您还可以做其他事情以及使用它们的原因,但我使用枚举的主要原因是防止出现无效参数的可能性。例如,想象以下方法:
public void doSomethingWithAMonth(int monthNum);
这不仅是模棱两可的(月份索引是从 1 开始还是从 0 开始?),而且您可以给出完全正确的无效数据(13+,负数)。如果您有Month
JAN、FEB 等的枚举,则签名变为:
public void doSomethignWithAMonth(Month month);
调用此方法的代码将更具可读性,并且不能提供无效数据。
我将 Enums 用于任何具有多个不变“类型”的事物。即一周中的几天。
为什么我在这种情况下不使用 String 是因为我不能在 String 上执行 switch 语句,而我可以在 Enum 上执行,所以一周中的每一天我都可以做一些特定的事情。
在使用单例模式时,我也使用 Enum,查看Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),引用:
“虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方式。” 不会粘贴代码阅读这本书非常好。
如果我是你,我会首先阅读Java 中的思考一章枚举类型。然后在 Effective Java 第 6 章之后,你应该会很好
最简单的定义 -An enum is just like any other class, with a predefined set of instances.
enum 最好的部分是它可以在我们不能使用字符串的 switch 语句中使用。
并且 Enum 是一种安全类型,因此您不能在运行时分配新值。
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.
}
除此之外,枚举对于创建单例很有用: