java5 学习笔记3——Enum

本文探讨了Java中枚举(Enum)的功能及其与C++枚举的区别,介绍了Enum的特性如不可继承性、方法支持及其实现接口的能力。特别强调了Enum与集合框架结合使用的新特性,例如通过EnumMap和EnumSet进行高效操作。


 我觉得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的英文意思就可以明白了 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值