关闭

java5 学习笔记3——Enum

860人阅读 评论(0) 收藏 举报


 我觉得Enum的基本功能,就是作为final static字段的替代品吧,的确让代码抽象程度提高了,也方便维护了,不过Enum的功能绝不限于此,既然是在新时期下出现的枚举,自然要比起C++前辈有突破才不会挨骂


 一开始用Enum,潜意识里总是和final static和C++的联系起来,其实除了功能有些相似外,Java的Enum有很多功能亮点,不过受到传统思维影响,最容易犯的一个错误是:把Enum的每个枚举值与整数联系起来(C的思维)。虽然Enum的确有ordinal方法,可以返回Enum中每个值的顺序(从零开始),但不代表每个值都是对应整数,两者没什么关系。同时Enum本身就是一种类型,不能总是将其与int或者String这些“底层实现”混在一起(或许编译成字节码后真的是某种int?不过那不是我们考虑的事情)


 此外,Enum可以有方法,可以实现某个接口,对应Enum的每个值还可以定义不同的方法内容...但是Enum不能被继承,而且,你写的每个Enum,都是隐含的继承自java.lang.Enum,这个类不能被你显示的继承,也就是说,除了要创建新的Enum,这个类你基本上不用理会


 我觉得Enum最有趣的地方、也是比较有特色的地方在于它和Map与Set之间的互操作。collection新加了一个EnumMap和EnumSet,可以将两者高效地结合起来,借助Enum对值的限制,可以很方便地让Map和Set也沾点光。
EnumSet有很多静态方法,可以生成EnumSet,比如allOf(Class element),可以生成包含指定类型的所有元素的EnumSet,再比如complementOf( EnumSet e),可以生成一个新的EnumSet,里面包含和“e”关联的Enum中,没有包含在“e”的枚举值,看看complement的英文意思就可以明白了 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:484284次
    • 积分:5587
    • 等级:
    • 排名:第4674名
    • 原创:89篇
    • 转载:6篇
    • 译文:11篇
    • 评论:251条
    最新评论
    CSDN好友