Enum有用吗?
回答
还有其他的事情可以做和使用它们的原因,但我使用枚举的主要原因是为了防止一个无效参数的可能性。例如,假设下面的方法:
public void doSomethingWithAMonth(int monthNum);
这不仅暧昧(?做月指数从1开始,或为0),但你可以给降权无效数据(13 +,负数) 。如果你有一个枚举Month
与一月,二月,等签名变为:
public void doSomethignWithAMonth(Month month);
代码调用此方法会更可读的,不能提供无效数据。
谢谢!现在我想我明白它好一点了:) – 2012-07-09 11:55:20
这是一个简单而好的例子 – njfife 2013-09-19 16:34:12
从名称“enum”开始,它非常适合枚举常量,它提供了扩展功能。例如,你可以存储一些常量,包括几个参数,如:constantId,constanNameString,附加参数。另外,枚举可以包含函数。
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
这是没有意义的。这就是为什么有一个天气枚举更好。这使代码更具可读性,并且不允许求和两个天气整数。
我不是这个例子的忠实粉丝,如果仅仅是因为我觉得它鼓励狭隘的想法。没有理由像这样不同的天气类型不能重叠,事实上,他们经常这样做。 – Thor84no 2014-08-20 09:29:58
@ Thor84no:谢谢你的评论。然而,这一切都取决于领域和应用程序,所以说“鼓励狭隘思维”。似乎不合适。 – 2014-08-20 09:32:48
我对任何具有多个不变“类型”的东西使用枚举。即一周的几天。
为什么我在这种情况下不使用字符串是因为我无法在字符串上进行switch语句,并且我可以在Enum上这样每周的每一天我都可以做一些特定的事情。
与单模式工作时,我也用枚举,检查Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),报价:
“虽然这种方法还没有得到广泛 采用,单元素枚举类型是实现一个单身的最佳方式“。不要粘贴代码阅读这本书很好。
如果我是你,我首先会阅读Thinking in java章节枚举类型。然后在那之后有效的Java第6章和你应该很好
当你有一个功能重要且有限的值的列表时,Enum非常有用。
举例说明,您需要使用一周中的某一天:另一天不会添加,您宁愿有一天。星期一在你的代码中而不是数字,并且必须记住0是星期一,1是星期二,依此类推。 这让switch语句更容易理解也与:
Switch(day) {
case Monday : ... break;
case Tuesday : ... break
etc.
}
除其他事项外,枚举是创建单身有用:
What is an efficient way to implement a singleton pattern in Java?
我会添加到其他的答案是枚举是只有固定数量的实例的类。这些实例可能具有字段和方法,并可用作任何其他Java对象。例如,Month
枚举可以定义方法,如
public int getNumberOfDays(int year);
public boolean isFirstOfYear();
最简单的定义 - An enum is just like any other class, with a predefined set of instances.
最佳枚举的一部分,它可以在我们不能使用串行中的开关语句中使用。
而Enum是一种安全类型,因此您不能在运行时分配新值。
只要有人遇到这个问题,从Java 7开始,在'switch'语句中不能使用''''字符串就不再是真的了。 http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no 2014-08-20 09:32:32
- 1. 使用class.isEnum()或instanceof Enum更好吗?
- 2. 使用Enum?
- 3. 使用ENUM
- 4. Enum可能过于臃肿吗?
- 5. Enum可以完全序列化吗?
- 6. 我可以扩展Enum a la Enum.GetValues()吗?
- 7. 除了类,接口或Enum还有别的东西吗?
- 8. 与Enum类型的HashSet有奇异的相等结果吗?
- 9. Hibernate/JPA:map <Object,Enum> manytomany有可能吗?
- 10. Keys Enum有哪些格式可用?
- 11. Enum有多个描述
- 12. Enum没有被声明?
- 13. Enum和Dictionary <Enum,Action>
- 14. Mysql空ENUM到postgresql ENUM
- 15. 我可以使用Enum引用一个文本字符串吗?
- 16. 使用enum可以使用地图,反之亦然吗?
- 17. 在[C]中将`enum`转换为其他`enum`是否有效?
- 18. HttpContext.Current.Application.Get([some enum])和enum之间有什么区别?
- 19. 在这种情况下使用Enum多态性有什么好处吗?
- 20. Enum适用于此?
- 21. 使用ENUM类型
- 22. AXVLC.VLCPlaylistMode的用途enum
- 23. PostgreSQL,用Enum替换
- 24. 我可以使用ENUM作为参数吗? C#
- 25. 你可以使用Enum for Double变量吗?
- 26. 我可以使用来自php的查询修改ENUM吗?
- 27. 用Enum填充通用JComboBox
- 28. webservice enum
- 29. group by all enum values without enum values
- 30. Enum和enum之间的区别
http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib 2012-07-09 10:41:12
http://stackoverflow.com/questions/2077634/enum-in-java-advantages – assylias 2012-07-09 10:43:44