在阅读了关于枚举的一些问题和答案后,我发现它并没有真正有用......
这是类和变量之间的东西,但我知道在哪里可以使用它,所以它比一个类或一些变量更有用。
答案 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?