关闭

Java 中Enum 的扩展

发表于:2013-9-03 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:不世剑客    来源:51Testing软件测试网采编

  Java 原生的Enum没有办法与C中的Enum一样随意指定成员的值,在一些C语言直接与Java 通信的场景中会比较麻烦,所以我对Java 原有的Enum进行扩展来达到随意指定成员值的目的:

public class Test {

 public static void main(String args[]){
  CMD[] name = CMD.values();
  for (CMD cmd : name) {
   System.out.println("i:" + cmd.value());
  }
 }

    public static enum CMD{
     e_CMD_MIN(900),
     e_CMD_SET_PORT(e_CMD_MIN.value),
     e_CMD_GET_PORT,
     e_CMD_SET_POS,
     e_CMD_MAX,
     
     e_CMD_RET_MIN(1000),
     e_CMD_URGENT_MSG(e_CMD_RET_MIN.value),
     e_CMD_SET_POWER,
     e_CMD_GET_POWER,
     e_CMD_RET_MAX;
          
     private final int value;
     private static int count = 0;
     
     private static void set(int value){
      count = value;
     }
     private static int prv(){
      return count;
     }
     private static int next(){
      return count++;
     }

     //默认构造函数,value依次递增
     CMD(){
      this.value = next();
      //this.value = count++;
     };
     
     //构造函数:直接指定value的值
     CMD(int value){
      //检查新指定的value是否合法,非法时抛出异常
      if((value + 1) < prv()){
       try {
     throw new Exception(this.name()
       + ":Incorrect value,previous is " + prv()
       + ",current is " + value);
    } catch (Exception e) {
     e.printStackTrace();
    }
      }
      this.value = value;
      set(value + 1);
     }
     
     //获取每个成员的值
     public final int value(){
   return value;
     }
    }
}

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号