码迷,mamicode.com
首页 > 编程语言 > 详细

《Effective Java》第6章 枚举和注解

时间:2017-09-30 15:04:04      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:完全   enum   种类型   note   img   over   遍历   image   快速   

第30条:用enum代替int常量

将加班工资计算移到一个私有的嵌套枚举中,将这个策略枚举(strategy enum)的实例传到PayrollDay枚举的构造器中。之后PayrollDay枚举将加班工资计算委托给策略枚举:
技术分享
以上,方法overtimePay()在每个枚举类示例中实现,对外提供一致的pay()方法。

第31条:用实例域代替序数

永远不要根据枚举的序数导出与它关联的值、而是要将它保存在一个实例域中:
技术分享

第33条:用EnumMap代替序数索引

技术分享

现在假设有一个香草的数组。表示一座花园中的植物,你想要按照类型(一年生、多年生或者两年生植物)进行组织之后将这些植物列出来。如果要这么做的话,需要构建泛个集合,征种类型一个,并且遍历整座花园,将每种香草放到相应的集合中。有些程序员会将这些集合放到一个按照类型的序数进行索引的数组中来实现这一点。
一个反例:使用ordinal()方法
技术分享

有一种非常快速的Map实现专门用于枚举键,称作java.util.EnumMap。以下就是用EnumMap改写后的程序:
技术分享

Note:
Enum规范中谈到ordinal时这么写道:“大多数程序员都不需要这个方法。它是设计成用于像EnumSet和EnumMap这种基于枚举的通用数据结构的。”除非你在编写的是这种数据结构,否则最好完全避免使用ordinal方法。

第34条:用接口模拟可伸缩的枚举

技术分享
虽然枚举类型(BasicOperation)不是可扩展的,但接口类型( Operation)则是可扩展的,它是用来表示API中的操作的接口类型。你可以定义另一个枚举类型,它实现这个接口,并用这个新类型的实例代替基本类型。

《Effective Java》第6章 枚举和注解

标签:完全   enum   种类型   note   img   over   遍历   image   快速   

原文地址:http://www.cnblogs.com/myitroad/p/7614658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!