2012-07-09 19 views
10

阅读枚举的一些问题和答案后,我并不觉得真正有用​​的...Enum有用吗?

它是类和变量之间的东西,但我知道我在哪里可以使用它,所以它会比较有用,然后一类,或者例如一些变量。

+6

http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib 2012-07-09 10:41:12

+1

http://stackoverflow.com/questions/2077634/enum-in-java-advantages – assylias 2012-07-09 10:43:44

回答

32

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

public void doSomethingWithAMonth(int monthNum); 

这不仅暧昧(?做月指数从1开始,或为0),但你可以给降权无效数据(13 +,负数) 。如果你有一个枚举Month与一月,二月,等签名变为:

public void doSomethignWithAMonth(Month month); 

代码调用此方法会更可读的,不能提供无效数据。

+1

谢谢!现在我想我明白它好一点了:) – 2012-07-09 11:55:20

+1

这是一个简单而好的例子 – njfife 2013-09-19 16:34:12

2

从名称“enum”开始,它非常适合枚举常量,它提供了扩展功能。例如,你可以存储一些常量,包括几个参数,如:constantId,constanNameString,附加参数。另外,枚举可以包含函数。

enum的一个奇特的使用是做一个单身人士。

4

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

4

一个枚举有助于防止人们做他们不应该做的事情。举例来说,如果我有:

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

+0

我不是这个例子的忠实粉丝,如果仅仅是因为我觉得它鼓励狭隘的想法。没有理由像这样不同的天气类型不能重叠,事实上,他们经常这样做。 – Thor84no 2014-08-20 09:29:58

+0

@ Thor84no:谢谢你的评论。然而,这一切都取决于领域和应用程序,所以说“鼓励狭隘思维”。似乎不合适。 – 2014-08-20 09:32:48

10

我对任何具有多个不变“类型”的东西使用枚举。即一周的几天。

为什么我在这种情况下不使用字符串是因为我无法在字符串上进行switch语句,并且我可以在Enum上这样每周的每一天我都可以做一些特定的事情。

与单模式工作时,我也用枚举,检查Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),报价:

“虽然这种方法还没有得到广泛 采用,单元素枚举类型是实现一个单身的最佳方式“。不要粘贴代码阅读这本书很好。

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

2

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

举例说明,您需要使用一周中的某一天:另一天不会添加,您宁愿有一天。星期一在你的代码中而不是数字,并且必须记住0是星期一,1是星期二,依此类推。 这让switch语句更容易理解也与:

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

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

public int getNumberOfDays(int year); 
public boolean isFirstOfYear(); 
7

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

最佳枚举的一部分,它可以在我们不能使用串行中的开关语句中使用。

而Enum是一种安全类型,因此您不能在运行时分配新值。

+1

只要有人遇到这个问题,从Java 7开始,在'switch'语句中不能使用''''字符串就不再是真的了。 http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no 2014-08-20 09:32:32