Java编程思想之枚举类型

1.     关键字enum可以将一组具名的值的有限集合创建为一种新的类型。这些具名的值为该枚举类型的实例对象。

2.     创建enum时,编译器生成一个继承了java.lang.Enum<T>的类。Enum类实现了Comparable接口,所以具有compareTo()方法,还是实现了Serializable接口。

3.     使用static import能够将enum实例的标识符带入当前的命名空间,所以无需再用enum类型来修饰enum实例。但在定义enum的同一文件中,这种技巧不能用。

4.     除了不能继承一个enum之外,可以把enum看成一个常规的类。可以在enum中添加方法,甚至可以有main()方法。

5.     可以通过提供一个带参构造器来实现枚举实例的带参初始化,以存储该实例相关的描述信息。

6.     如果在enum中打算自定义方法,那么必须在最后一个enum实例后添加一个分号,必须先定义enum实例,再定义方法。

7.     只能在enum定义的内部使用其构造器创建enum实例,所以构造器可以设为private。不能在外面使用enum的构造器。

8.     覆盖enum的方法跟覆盖一般类的方法没有区别。

9.     由于枚举实例天生具有整数值的次序,所以可以在switch中使用enum。

10.  enum类中的values()和valueOf(单个参数)方法不是继承自Enum类,而是由编译器添加的static方法。编译器把enum类标记成final类,所以无法继承自enum。

11.  Class中有一个getEnumConstants()方法,即使Enum接口没有values()方法,也可以通过Class对象取得所有enum实例。

12.  由于Java不支持多重继承,所以enum不能再继承其他类,但可以同时实现一个或多个接口。<T extendsEnum<T>>表示T是一个enum实例。

13.  在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组,可以达到枚举元素分类组织的目的。对于enum而言,实现接口是使其子类化的唯一方法。

14.  简洁管理枚举的办法就是将一个enum嵌套在另一个enum内。

15.  由于不能从enum中删除或添加元素,所以引入EnumSet,以替代传统的基于int的“位标志”。EnumSet将一个long值作为比特向量,其中的元素必须是enum类型。,一个long值有64位,而一个enum实例只需一个bit表示其是否存在。也就是说,在不超过一个long的表达能力下,EnumSet可以应用于最多不超过64个元素的enum,如果超过64个,Enum会在必要的时候增加一个long。

16.  EnumMap要求其中的键来自一个enum。与EnumSet一样,enum实例定义的次序决定了其在EnumMap中的顺序。即使没有调用put方法,enum的每个实例作为EnumSet的一个键都存在,只不过没有值。

17.  enum允许为enum实例编写方法,从而为每一个enum实例赋予不同的行为。要实现常量相关的方法,需要为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法,有点像匿名类。

18.  不能将enum实例作为一个类型来使用,因为每个enum实例都是一个enum类型的staticfinal实例。由于是static实例,所以无法访问外部类的非static元素或方法。

19.  enum类允许覆盖常量相关的方法。

20.  枚举类型适合用来创建状态机,一个状态机可以具有有限个特定状态,它通常根据输入,从一个状态转移到下一个状态,非常适合用来表现不同的状态和输入。

21.  Java只支持单路分发,如果要执行的操作包含了不止一个类型未知的对象时,Java的动态绑定机制只能处理其中之一的类型。

22.  多态只能发送在方法调用时,所以如果想使用两路分发,那么就必须有两个方法调用:第一个方法调用决定第一个未知类型,第二个方法调用决定第二个未知类型。一般需要设定好某种配置,以便一个方法调用能够引出更多的方法调用。

23.  使用enum分发:使用构造器来初始化每个enum实例,并以一组结果作为参数,这两者放在一块,形成了类似查询表的结构。

24.  由于通配符不能拓展多个基类,所以最好不要在把Class<T>中的T用通配符取代。

25.  常数相关的方法允许为每个enum实例提供不同方法实现,最好的办法是把enum用在switch中。

26.  使用EnumMap可以实现两路分发。

27.  使用enum类内定义的二维数组,每个enum实例都有一个固定的值(基于其声明的次序),但它只能针对给定的常量输入产生常量输出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值