为了账号安全,请及时绑定邮箱和手机立即绑定

什么是枚举,它们为什么有用?

什么是枚举,它们为什么有用?

温温酱 2019-07-02 14:58:58
什么是枚举,它们为什么有用?今天我浏览了一下这个网站上的一些问题,我发现其中提到了enum 用于单例模式关于所谓的线程安全的好处,这样的解决方案。我从来没有用过enumS和我用Java编程已经有两年多了。显然他们改变了很多。现在,他们甚至在自己的内部完全支持OOP。现在,为什么和为什么我应该在日常编程中使用枚举?
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

当变量(特别是方法参数)只能从一小部分可能的值中提取一个时,您应该始终使用枚举。例如类型常量(合同状态:“永久”、“临时”、“学徒”)或标志(“立即执行”、“延迟执行”)。

如果使用枚举而不是整数(或字符串代码),则会增加编译时检查,避免错误传入无效常量,并记录哪些值是合法使用的。

顺便说一句,过度使用枚举可能意味着您的方法做得太多了(通常最好有几个单独的方法,而不是一个使用多个标志来修改它所做的事情的方法),但是如果您必须使用标志或类型代码,则可以选择枚举。

举个例子,哪个更好?

/** Counts number of foobangs.
 * @param type Type of foobangs to count. Can be 1=green foobangs,
 * 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.
 * @return number of foobangs of type
 */public int countFoobangs(int type)

对决

/** Types of foobangs. */public enum FB_TYPE {
 GREEN, WRINKLED, SWEET, 
 /** special type for all types combined */
 ALL;}/** Counts number of foobangs.
 * @param type Type of foobangs to count
 * @return number of foobangs of type
 */public int countFoobangs(FB_TYPE type)

方法调用,如:

int sweetFoobangCount = countFoobangs(3);

然后变成:

int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);

在第二个示例中,可以立即清楚地看到哪些类型是允许的,文档和实现不能不同步,编译器可以强制执行。另外,一个无效的调用,如

int sweetFoobangCount = countFoobangs(99);

已经不可能了。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 969 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号