什么是枚举?

 

什么是枚举?
 
  • 定义
    • 枚举类型(enum type)是指由一组固定的常量组成合法的类型。Java中由关键字enum来定义一个枚举类型。
      public enum Season {
      SPRING, SUMMER, AUTUMN, WINER;
      }
  • 特点
    • 1) 使用关键字enum
    • 2) 类型名称,比如这里的Season 
    • 3) 一串允许的值,比如上面定义的春夏秋冬四季
    • 4) 枚举可以单独定义在一个文件中,也可以嵌在其它Java类中
    • 5) 枚举可以实现一个或多个接口(Interface)
    • 6) 可以定义新的变量
    • 7) 可以定义新的方法
    • 8) 可以定义根据具体枚举值而相异的类
  • 应用场景
    • 类型安全为例
      public enum Season {
      SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
      private int code;
      private Season(int code){
      this.code = code;
      }
      public int getCode(){
      return code;
      }
      }
      public class UseSeason {
      /**
      * 将英文的季节转换成中文季节
      * @param season
      * @return
      */
      public String getChineseSeason(Season season){
      StringBuffer result = new StringBuffer();
      switch(season){
      case SPRING :
      result.append("[中文:春天,枚举常量:" + season.name() + ",数据:" + season.getCode() + "]");
      break;
      case AUTUMN :
      result.append("[中文:秋天,枚举常量:" + season.name() + ",数据:" + season.getCode() + "]");
      break;
      case SUMMER :
      result.append("[中文:夏天,枚举常量:" + season.name() + ",数据:" + season.getCode() + "]");
      break;
      case WINTER :
      result.append("[中文:冬天,枚举常量:" + season.name() + ",数据:" + season.getCode() + "]");
      break;
      default :
      result.append("地球没有的季节 " + season.name());
      break;
      }
      return result.toString();
      }
      public void doSomething(){
      for(Season s : Season.values()){
      System.out.println(getChineseSeason(s));//这是正常的场景
      }
      //System.out.println(getChineseSeason(5));
      //此处已经是编译不通过了,这就保证了类型安全
      }
      public static void main(String[] arg){
      UseSeason useSeason = new UseSeason();
      useSeason.doSomething();
      }
      }

      ​​
      [中文:春天,枚举常量:SPRING,数据:1] [中文:夏天,枚举常量:SUMMER,数据:2] [中文:秋天,枚举常量:AUTUMN,数据:3] [中文:冬天,枚举常量:WINTER,数据:4]
      这里有一个问题,为什么我要将域添加到枚举类型中呢?目的是想将数据与它的常量关联起来。如1代表春天,2代表夏天。
      ​​
  • 总结
    • 那么什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数、一年四季等。或者是在我们编译前就知道其包含的所有值的集合。Java 1.5的枚举能满足绝大部分程序员的要求的,它的简明,易用的特点是很突出的。
  • 用法
    • 常量
      public enum Color {
      RED, GREEN, BLANK, YELLOW
      } ​
    • switch
      enum Signal {
      GREEN, YELLOW, RED
      }
      public class TrafficLight {
      Signal color = Signal.RED;
      public void change() {
      switch (color) {
      case RED:
      color = Signal.GREEN;
      break;
      case YELLOW:
      color = Signal.RED;
      break;
      case GREEN:
      color = Signal.YELLOW;
      break;
      }
      }
      }
    • 向枚举中添加新方法
      public enum Color {
      RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
      // 成员变量
      private String name;
      private int index;
      // 构造方法
      private Color(String name, int index) {
      this.name = name;
      this.index = index;
      }
      // 普通方法
      public static String getName(int index) {
      for (Color c : Color.values()) {
      if (c.getIndex() == index) {
      return c.name;
      }
      }
      return null;
      }
      // get set 方法
      public String getName() {
      return name;
      }
      public void setName(String name) {
      this.name = name;
      }
      public int getIndex() {
      return index;
      }
      public void setIndex(int index) {
      this.index = index;
      }
      }
    • 覆盖枚举的方法
      public enum Color {
      RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
      // 成员变量
      private String name;
      private int index;
      // 构造方法
      private Color(String name, int index) {
      this.name = name;
      this.index = index;
      }
      //覆盖方法
      @Override
      public String toString() {
      return this.index+"_"+this.name;
      }
      }
    • 实现接口
      public interface Behaviour {
      void print();
      String getInfo();
      }
      public enum Color implements Behaviour{
      RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
      // 成员变量
      private String name;
      private int index;
      // 构造方法
      private Color(String name, int index) {
      this.name = name;
      this.index = index;
      }
      //接口方法
      @Override
      public String getInfo() {
      return this.name;
      }
      //接口方法
      @Override
      public void print() {
      System.out.println(this.index+":"+this.name);
      }
      }
    • 使用接口组织枚举
      public interface Food {
      enum Coffee implements Food{
      BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
      }
      enum Dessert implements Food{
      FRUIT, CAKE, GELATO
      }
      }
  • 参考http://www.hollischuang.com/archives/195

 

转载于:https://www.cnblogs.com/More-World/p/9544855.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值