编程思想 -- 第19章 -- 枚举类型

枚举类型
    关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。
    
一、基本enum特性
    调用enum的values()方法,可以遍历enum实例。values()方法返回enum实例的数组,而且该数组中的元素严格保持其在enum中声明时的顺序,因此你可以在循环中使用values()返回的数组。
    创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum。
    
二、向enum中添加新方法
    除了不能继承自一个enum外,基本上可以将enum看做一个常规的类。
    
三、switch语句中的enum
    在switch中使用enum,是enum提供的一项非常便利的功能。一般来说,在switch中只能使用整数值,而枚举实例天生就具备整数值的次序并且可以通过ordinal()方法取得其次序,因此我们可以在switch语句中使用enum。
    
四、values()的神秘之处。
    编译器为你创建的enum类都继承自enum类,然而enum类并没有values()方法,values()是由编译器添加的static方法。在创建对象的过程中,编译器为其添加了valueOf()的方法。
    
五、实现,而非继承
    所有的enum都继承自java.lang.enum类,由于java不支持多重继承,所以enum不能再继承其他类。
    
六、随机选取
    从enum实例中进行随机选择,可以利用泛型,从而使得工作更一般化。
    
七、使用接口组织枚举
    在接口的内部,创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。
    
八、使用EnumSet替代标志
    Enum看起来具有集合的行为,由于不能从enum中删除或添加元素,所以它只能算不太有用的集合。EnumSet的基础是long,一个long值有64位,它非常快速高效。
    
九、使用EnumMap
    EnumMap是一种特殊的Map,它要求其中的键必须来自一个enum,由于enum本身的限制,所以EnumMap在内部可由数组实现。因此EnumMap的速度很快,可以使用enum实例在Enummap中进行查找操作。
    
十、常量相关的方法
    Java的Enum允许程序员为enum实例编写方法,从而为每个enum实例赋予各自不同的行为。要实现常量相关的方法,你需要为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法。
    编译器不允许我们将一个enum实例当作class使用,我们分析一下编译器生成的代码,就知道这种行为也是很正常的。因为每个enum元素都是一个LikeClass类型的static final实例。
    虽然enum有某些限制,但是一般而言,我们还是可以将其看作是类。
    枚举类型非常适合用来创建状态机。
    
十一、多路分发。
    Java只支持单路分发,如果要执行的操作包含了不止一个类型位置的对象时,java的动态绑定机制只能处理其中一个的类型。必须自己判定其他的类型,从而实现自己的动态绑定行为。解决方法是多路分发。
    
十二、总结
    enum可以与Java诞的其他功能结合使用,如多态,泛型和反射。
    

    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值