用enum 代替int (30)

一、int 枚举模式数组

  • 在类型安全性和使用方便性没有任何帮助
  • apple_ 和orange_ 之间比较,编译器不会有任何警告报出
  • 十分脆弱,编译枚举时常量,编译到使用他们的客户端(int关联发生变化须要从新编译)

二、String 枚举模式安全

  • int 枚举模式变体
  • 常量可打印(int 枚举模式打印出来就是数字),打印出来是字符串
  • 会引来性能问题,由于依赖字符串比较
  • 会使字符串硬编码到客户端代码中(初级编码会这样,而不是使用适当域(field)名)
  • 若是字符串有错误,运行时才会发现,编译时不会有任何警告

三、jdk 1.5之后的新枚举app

  • 这种模式本质上是int 值
  • 基本思想:经过公有静态 final 类为每一个枚举实例导出常量
  • 没有能够访问的构造器,枚举是真正的final 类
  • 枚举实例是受控的,客户端不能生成枚举实例,不能扩展,只有声明过的枚举常量

四、枚举提供了编译时的类型安全函数

  • 传递错误类型会致使编译时报错
  • 试图 == 比较时,各个常量是严格区分的
  • 能够增长或者从新编排枚举类型代码,无需修改客户端代码(由于常量值没有被编译到客户端代码中,存在int 模式中)

五、枚举类型容许添加任意方法和域,实现任意接口性能

  • 提供了全部Object 方法的高级实现,实现了Comparable 接口和 Serializable 接口
  • 并针对枚举类型的可任意改变性,设计了序列化方式

六、方法或域添加到枚举类型中编码

  • 将数据和常量关联起来(枚举常量的属性值)
  • 可使用适当的方法加强枚举类型(枚举类型先成为一个简单集合,慢慢演变成全功能的抽象)
  • 以下,星球枚举类型,传入质量和半径建立常量
  • 将数据与枚举常量关联起来,声明实例域,编写带有数据,并将数据保存在域中的构造器
  • 枚举天生不可变,全部域都应该是final 

七、不一样行为与每一个枚举常量关联起来,可使用以下抽象方法设计

  • 注意不带参数的几个常量写法

  • 带参数的

  • 客户端调用

八、枚举类型有一个自动产生的方法3d

  • valueOf 方法,将常量的名字转变为常量自己
  • 若是在枚举类型中覆盖toString 方法,要考虑编写一个fromString 方法(实现字符串变回相应枚举)

  • 枚举构造器不能够访问枚举的静态域,编译时常量除外(枚举不容许在其构造函数中使用静态引用
  • 枚举类型语法要求:仅仅私有构造方法是容许的(以下)

九、枚举常量中共享代码更加困难blog

私有嵌套枚举:策略枚举接口

十、枚举中的switch 语句,适合给外部的枚举类型,增长特定于常量的行为

十一、枚举性能缺陷

  • 装载和初始化时会有空间和时间成本
  • 枚举优先使用 Comparable 而非 int常量

十二、每当须要固定常量数组的时候,使用枚举

  • 与int 相比,枚举易读、安全、功能强大
  • 特定于常量的方法,优先启用自有值枚举
  • 多个枚举常量共享相同的行为,考虑策略枚举
相关文章
相关标签/搜索