Enum对什么有用?

时间:2012-07-09 10:38:13

标签: java enums

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

这是类和变量之间的东西,但我知道在哪里可以使用它,所以它比一个类或一些变量更有用。

9 个答案:

答案 0 :(得分:33)

您可以做其他事情以及使用它们的原因,但我使用枚举的主要原因是为了防止参数无效的可能性。例如,想象一下以下方法:

public void doSomethingWithAMonth(int monthNum);

这不仅含糊不清(月份索引从1开始,还是在0?),但你可以给出右下角的无效数据(13 +,负数)。如果您有带有JAN,FEB等的枚举Month,则签名将变为:

public void doSomethignWithAMonth(Month month);

调用此方法的代码将更具可读性,并且无法提供无效数据。

答案 1 :(得分:10)

我将Enums用于任何具有多种不变“类型”的东西。即一周的几天。

为什么我在这种情况下不使用String是因为我无法对字符串执行switch语句而且我可以在Enum上执行,因此对于每周的每一天我都可以执行特定的操作。

在处理单例模式时我也使用Enum,检查Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),引用:

“虽然这种方法尚未广泛应用 采用单元素枚举类型是实现单例的最佳方式。“不要粘贴代码阅读本书非常好。

如果我是你,我首先阅读Thinking in java章节枚举类型。然后在有效的Java第6章之后,你应该是好的

答案 2 :(得分:7)

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

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

和Enum是一种安全类型,因此您无法在运行时分配新值。

答案 3 :(得分:4)

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

答案 4 :(得分:4)

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这没有任何意义。这就是为什么最好有一个天气枚举。这使代码更具可读性,并且不允许对两个天气整数求和。

答案 5 :(得分:3)

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

的方法
public int getNumberOfDays(int year);
public boolean isFirstOfYear();

答案 6 :(得分:2)

从名称“enum”开始,它是枚举常量的理想选择,它提供了扩展功能。例如,您可以存储一些常量,包括几个参数,例如:constantId,constanNameString,其他参数。另外,枚举可以包含函数。

enum的一个奇特用途是制作一个单身人士。

答案 7 :(得分:2)

当您有一个功能重要且有限的值列表时,枚举非常有用。

比如说,你需要使用一周中的某一天:不会添加另一天,你宁愿在代码中使用Day.MONDAY而不是数字,并且必须记住0是星期一,1是星期二等等。 它使switch语句更容易理解,使用:

Switch(day) { 
  case Monday : ... break;
  case Tuesday : ... break
  etc.
}

答案 8 :(得分:2)

除此之外,Enum对于创建单身人士非常有用:

What is an efficient way to implement a singleton pattern in Java?

相关问题