关于java:Enum对什么有用?

What is Enum useful for?

本问题已经有最佳答案,请猛点这里访问。

在阅读了一些关于枚举的问题和答案之后,我发现它并没有真正的用处…

它介于类和变量之间,但我知道在哪里可以使用它,这样它比类或几个变量更有用。


您还可以做其他事情,并有理由使用它们,但我使用枚举的主要原因是为了防止出现无效参数的可能性。例如,假设以下方法:

1
public void doSomethingWithAMonth(int monthNum);

这不仅不明确(月份索引是从1开始还是从0开始?),但您可以给出正确的无效数据(13+,负数)。如果您有1月、2月等的枚举Month,则签名变为:

1
public void doSomethignWithAMonth(Month month);

调用此方法的代码的可读性将大大提高,并且不能提供无效数据。


对于任何具有多个非挂起的"类型"的对象,我都使用枚举。即一周中的几天。

在这种情况下,我之所以不使用string,是因为我不能在string上执行switch语句,也可以在enum上执行,所以在一周的每一天,我都可以执行一些特定的操作。

我也使用EnUM当使用单模式时,检查有效的Java书CH2(第2章创建和销毁对象),引用:

"尽管这种方法尚未广泛应用采用单元素枚举类型是实现单元素的最佳方法,"不粘贴代码就读懂书,这很好。

如果我是你,我首先会阅读Java章节中列举的思维方式。然后是有效的Java第6章,你应该是好的。


最简单的定义-An enum is just like any other class, with a predefined set of instances.

枚举的最佳部分是它可以在不能使用字符串的switch语句中使用。

枚举是一个安全类型,因此不能在运行时分配新值。


枚举对于防止人们做不该做的事情很有用。例如,如果我有:

1
2
3
public final static int WEATHER_SUNNY = 0;
public final static int WEATHER_RAINY = 1;
public final static int WEATHER_HAIL = 2;

那我就可以做了:江户十一〔二〕这没有道理。所以最好有天气预报。这使得代码更具可读性,并且不允许求和两个天气整数。


enum迫使编码人员从预先定义的实体或概念列表中进行选择。虽然可以通过类或将变量设置为特定的已知值来实现相同的目标,但是枚举不太容易出错,因为它会宣传并强制使用一个菜单,值的设置者可以从中进行选择。


我会在其他答案中加上,枚举是只有固定数量实例的类。这些实例可以有字段和方法,并且可以用作任何其他Java对象。例如,Month枚举可以定义如下方法

1
2
public int getNumberOfDays(int year);
public boolean isFirstOfYear();


除此之外,枚举对于创建单例很有用:

在Java中实现单模式的有效方法是什么?


当您有一个函数意义和有限的值列表时,枚举非常有用。

举例来说,你需要使用一周中的某一天:另一天不会被添加,你宁愿用day.monday而不是数字,并且必须记住0是星期一,1是星期二等等。它也使switch语句更容易理解,包括:

1
2
3
4
5
Switch(day) {
  case Monday : ... break;
  case Tuesday : ... break
  etc.
}

从名称"enum"开始,它非常适合于提供扩展功能的枚举常量。例如,您可以存储一些常量,这些常量由以下几个参数组成:constantid、constanamestring和其他参数。另外,枚举可以包含函数。

枚举的一种奇特用法是生成一个单例。