发布日期:2018-03-26
什么是枚举,枚举为什么很有用?+ 查看更多
什么是枚举,枚举为什么很有用?
+ 查看更多
发布日期:2018-03-23 17:14
分类:JAVA
浏览次数:155
今天我正在浏览这个网站上的一些问题,我发现一个enum被用于单例模式下的关于线程安全对这种解决方案的好处。
我用Java编程好几年了,我从来没有用过枚举。显然他们改变了很多,现在他们甚至在自己内部完全支持面向对象程序设计。
现在我天天编程用enum是为什么?
回答
当变量(特别是方法参数)只能从一组可能的值中取出一个时,应该总是使用枚举。示例应该是类型常量(协议状态:"permanent", "temp", "apprentice"),或者标志(“立即执行”,“延迟执行”)。
如果使用枚举而不是整数(或字符串代码),则会增加编译时的检查时间,避免传入无效常量的错误,并记录哪些值是合法使用的。
顺便说一句,过度使用枚举意味着你的方法做的太多了(通常最好有几个单独的方法,而不是一个需要几个标志来修改他的作用的方法),但如果你必须使用标志或类型代码,枚举是你应该用的办法。
例如下面这个例子,哪个更好?
/** 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);再也不可能了。