Java枚举类型记录
时间:2021-06-16 17:49:38
收藏:0
阅读:0
枚举
1. 枚举
枚举类型( enum type )是指由一组固定的常量组成合法值的类型,本质上是int值。
Ⅰ. 用enum
代替int
常量
(1)int
枚举模式
// FruitConsts.java
/**
* @author cph
* create datetime 2021/6/8 16:07
*
* <p>int 枚举模式</p>
*/
public class FruitConsts {
public static final int APPLE_FUJI = 0;
public static final int APPLE_PIPPIN = 1;
public static final int APPLE_GRANNY_SMITH = 2;
public static final int ORANGE_NAVEL = 0;
public static final int ORANGE_TEMPLE = 1;
public static final int ORANGE_BLOOD = 2;
}
缺陷:
- 不具备安全性
- 没有描述性可言
- 是编译时常量,它的int值会被编译到使用它们的客户端中,如果关联的值发生变化,则客户端必须重新编译
- 很难将int枚举常量转换成可打印的字符串(String 枚举模式是int枚举模式的一种变体,会导致性能问题,因为它依赖字符串的比较)
(2)枚举类型
// Apple.java
/**
* @author cph
* create datetime 2021/6/8 16:02
*/
public enum Apple {
/**
* 苹果的品牌分类
*/
FUJI,
PIPPIN,
GRANNY_SMITH
}
// Orange.java
/**
* @author cph
* create datetime 2021/6/8 16:03
*/
public enum Orange {
/**
* 桔子的品牌分类
*/
NAVEL,
TEMPLE,
BLOOD
}
优势:
- 本质上是int值
- 没有可访问的构造器,是真正的final类
- 单例的泛型化,本质上是单元素的枚举
- 保证了编译时的类型安全
- 包含同名常量的多个枚举类型可以在一个系统中和平共处,因为每个类型都有自己的命名空间
Ⅱ. 使用实例域代替序数
Ⅲ. 用EnumSet
代替位域
使用较少,待补充
Ⅳ. 用EnumMap
代替序数索引
使用较少,待补充
Ⅴ. 用接口模拟可扩展的枚举
未完...
源代码
参考:《Effective Java 第三版》
评论(0)