码迷,mamicode.com
首页 > 编程语言 > 详细

Java枚举类型记录

时间:2021-06-16 17:49:38      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:final   问题   https   http   temp   关联   包含   空间   ann   

枚举

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;
}

缺陷:

  1. 不具备安全性
  2. 没有描述性可言
  3. 是编译时常量,它的int值会被编译到使用它们的客户端中,如果关联的值发生变化,则客户端必须重新编译
  4. 很难将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
}

优势:

  1. 本质上是int值
  2. 没有可访问的构造器,是真正的final类
  3. 单例的泛型化,本质上是单元素的枚举
  4. 保证了编译时的类型安全
  5. 包含同名常量的多个枚举类型可以在一个系统中和平共处,因为每个类型都有自己的命名空间

Ⅱ. 使用实例域代替序数

Ⅲ. 用EnumSet代替位域

使用较少,待补充

Ⅳ. 用EnumMap代替序数索引

使用较少,待补充

Ⅴ. 用接口模拟可扩展的枚举

未完...

源代码
参考:《Effective Java 第三版》

Java枚举类型记录

标签:final   问题   https   http   temp   关联   包含   空间   ann   

原文地址:https://www.cnblogs.com/cphovo/p/14887393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!