精华内容
下载资源
问答
  • 枚举定义

    2015-09-12 13:30:34
    枚举类型定义枚举变量只能取集合中的某一元素值。由于枚举类型是导出数据类型,因此,必须先定义枚举类型,然后再用枚举类型定义枚举型变量。    enum  { };  其中:关键词enum表示定义的是枚举...
    用枚举类型定义的枚举变量只能取集合中的某一元素值。由于枚举类型是导出数据类型,因此,必须先定义枚举类型,然后再用枚举类型定义枚举型变量。
    

     

      enum <枚举类型名> 
      { <枚举元素表> };
      其中:关键词enum表示定义的是枚举类型,枚举类型名由标识符组成,而枚举元素表由枚举元素或枚举常量组成。例如: 
      enum weekdays 
      { Sun,Mon,Tue,Wed,Thu,Fri,Sat };
      定义了一个名为 weekdays的枚举类型,它包含七个元素:Sun、Mon、Tue、Wed、Thu、Fri、Sat。在编译器编译程序时,给枚举类型中的每一个元素指定一个整型常量值(也称为序号值)。若枚举类型定义中没有指定元素的整型常量值,则整型常量值从0开始依次递增,因此,weekdays枚举类型的七个元素Sun、Mon、Tue、Wed、Thu、Fri、Sat对应的整型常量值分别为0、1、2、3、4、5、6。
      注意:在定义枚举类型时,也可指定元素对应的整型常量值。例如,描述逻辑值集合{TRUE、FALSE}的枚举类型boolean可定义如下:
      enum boolean 
      { TRUE=1 ,FALSE=0 };
      该定义规定:TRUE的值为1,而FALSE的值为0。
      而描述颜色集合{red,blue,green,black,white,yellow}的枚举类型colors可定义如下:
      enum colors 
      {red=5,blue=1,green,black,white,yellow};
      该定义规定red为5 ,blue为1,其后元素值从2 开始递增加1。green、black、white、yellow的值依次为2、3、4、5。此时,整数5将用于表示二种颜色red与yellow。通常两个不同元素取相同的整数值是没有意义的。
      枚举类型的定义只是定义了一个新的数据类型,只有用枚举类型定义枚举变量才能使用这种数据类型。 

      8.1.2枚举类型变量的定义

      定义枚举类型变量有三种方法,即:先定义类型后定义变量,定义类型的同时定义变量,直接定义变量,现介绍如下:
      1.先定义类型后定义变量
      格式: <枚举类型名> <变量1>〔,<变量2>,…,<变量n>〕;
      例如:enum colors 
      {red=5,blue=1,green,black,white,yellow};
      colors c1,c2;
      c1、c2 为colors类型的枚举变量。

      2.定义类型的同时定义变量

      格式:enum <枚举类型名> 
      { <枚举元素表> } <变量1>〔,<变量2>,…,<变量n>〕;
      例如:enum colors 
      {red=5,blue=1,green,black,white,yellow}c1,c2;

      3.直接定义枚举变量

      格式:enum 
      { <枚举元素表> } <变量1>〔,<变量2>,…,<变量n>〕;
      例如:enum 
      {red=5,blue=1,green,black,white,yellow} c1=red,c2=blue;
      由上例可以看出,定义枚举变量时,可对变量进行初始化赋值,c1的初始值为red,c2的初始值为blue。
     

      8.1.3 枚举类型变量的引用

      对枚举类型变量只能使用2类运算:赋值运算与关系运算。
      1.赋值运算
      C++中规定,枚举类型的元素可直接赋给枚举变量,且同类型枚举变量之间可以相互赋值。如:enum weekdays //定义星期日到星期六为枚举类型weekdays
    { Sun,Mon,Tue,Wed,Thu,Fri,Sat };
     void main ( void )
     { weekdays day1,day2; //定义两个枚举型变量day1、day2
      day1=Sun; //将元素Sun赋给枚举变量day1
      day2=day1; //枚举变量day1赋给day2
      cout<<day1<<endl; //输出day1的值,即Sun的序号0
     }
      该例定义了两个类型为weekdays的枚举类型变量day1与day2,这两个枚举型变量只能取集合 { Sun,Mon,Tue,Wed,Thu,Fri,Sat }中的一个元素,可用赋值运算符将元素Sun赋给day1。枚举变量day1的值可赋给同类枚举变量day2。注意:
      (1)不能用键盘通过"cin>>"向枚举变量输入元素值,例如:cin>>day1是错误的。因此,枚举变量的值只能通过初始化或赋值运算符输入。
      (2)可用"cout<<"输出枚举变量,但输出的是元素对应的序号值,而不是元素值。例如:cout<<day1; 用cout输出day1中元素Sun对应的序号值0,而不是元素Sun。

      2.关系运算
      枚举变量可与元素常量进行关系比较运算,同类枚举变量之间也可以进行关系比较运算,但枚举变量之间的关系运算比较是对其序号值进行的。例如:
      day1=Sun; //day1中元素Sun的序号值为0
      day2=Mon; //day2中元素Mon的序号值为1
      if (day2>day1) day2=day1; //day2>day1的比较就是序号值关系式:1>0的比较
      if (day1>Sat) da1=Sat; //day1>Sat的比较就是序号值关系式:0>6的比较
      day2与day1的比较,实际上是其元素Mon与Sun序号值1与0的比较,由于1>0成立,所以day2>day1条件为真,day2=day1=Sun。同样由于day1中元素Sun的序号值0小于Sat的序号值6,所以day1>Sat条件为假,day1的值不变。


    http://blog.csdn.net/lbsjs/article/details/178896

    展开全文
  • Java 使用枚举定义常量

    千次阅读 2020-02-10 10:07:22
    前言 JDK1.5之后出现了枚举类型,最近在公司的项目中一直出现了枚举,发现枚举真香。对于项目比较庞大的,使用枚举不仅可以增加代码的可读性,也就是大佬们说的“优雅”,还有利于后期...使用枚举定义常量 packa...

    前言

    JDK1.5之后出现了枚举类型,最近在公司的项目中一直出现了枚举,发现枚举真香。对于项目比较庞大的,使用枚举不仅可以增加代码的可读性,也就是大佬们说的“优雅”,还有利于后期代码的维护。枚举比较常用的场景就是用于常量的定义,但是相比于使用“static final”,枚举类型会增加内存的消耗,这个就是枚举的缺点,但是对于目前的硬件来说,这点还是可以忽略的。

    使用枚举定义常量

    package com.chen.mykinthtest.test;
    
    public enum Color {
    
        RED("红色", 1),
        GREEN("绿色", 2),
        BLUE("蓝色", 3);
    
        private String code;
        private int index;
    
        private Color(String code, int index) {
            this.code = code;
            this.index = index;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public int getIndex() {
            return index;
        }
    
        public void setIndex(int index) {
            this.index = index;
        }
    }
    
    package com.chen.mykinthtest.test;
    
    public class ColorTest {
    
        public static void main(String[] args) {
            String code = Color.RED.getCode();
            for(Color c:Color.values()){
                System.out.println("code"+c.getCode()+"  index:"+c.getIndex());
            }
    
        }
    }
    

     

    展开全文
  • 一个好的常量管理更有利于提高程序的开发效率和可维护性,前面讲到了利用接口定义常量(请看我之前的博客“java架构篇之常量管理(接口定义法)”),现在来讲讲利用枚举定义常量。首先看示例代码public enum ...

    常量的统一定义一直是一个java框架的关键所在,一个好的常量管理更有利于提高程序的开发效率和可维护性,前面讲到了利用接口定义常量(请看我之前的博客“java架构篇之常量管理(接口定义法)”),现在来讲讲利用枚举定义常量。

    首先看示例代码

    public enum MessageType {
      SYSTEM_MESSAGE(1,"系统消息"),
      COMMENT_MESSAGE(2,"评论消息"),
      COLLECT_MESSAGE(3,"收藏消息");
    
      private Integer code;
      private String name;
      
      MessageType(Integer code, String name) {
        this.code = code;
        this.name = name;
      }
      public Integer getCode(){
        return code;
      }
    
      public String getName(){
        return name;
      }
    }

    其实本质上Enum也是一个类,但与类不同的是,Enum不能被继承,其主要用来定义指定业务概念内的常量,例如消息类型,分为系统消息,评论消息,收藏消息这几种类型。你可能有疑问的地方在这

      SYSTEM_MESSAGE(1,"系统消息"),
      COMMENT_MESSAGE(2,"评论消息"),
      COLLECT_MESSAGE(3,"收藏消息");

    其实这段代码等价于(假设MessageType定义成class的情况下)

    public class MessageType {
    
      public static final MessageType SYSTEM_MESSAGE = new MessageType(1, "系统消息");
      public static final MessageType COMMENT_MESSAGE = new MessageType(2, "评论消息");
      public static final MessageType COLLECT_MESSAGE = new MessageType(3, "收藏消息");
      //其他省略
    }
    怎么样,是不是很熟悉,其实枚举的作用等价于,定义一个类,然后把常量都定义出来。当然,枚举相对于类还有很多优势,在文章结尾的时候会进行总结。

    注意:enum不能被new出来,所以我把这里示例换成了Class,Enum一般指定有限个可能的集合,所以不能new出来,不然它本身就代表无限种可能了,不符合enum的初衷。

    下面来说说怎么在代码中使用它

        MessageType curType = MessageType.COLLECT_MESSAGE;
        switch (curType){
          case COMMENT_MESSAGE:
            //to do something
            break;
          case SYSTEM_MESSAGE:
            //to do something
            break;
          case COLLECT_MESSAGE:
            //to do something
            break;
        }

    直接用switch就能匹配相应的分支。但是有时前台传过来数值可能只是数值,这时候应该怎么办呢,当然你也可以这么写,首先在MessageType里面加一个函数,用来把常量数值转换为相应的枚举类型。

      public static MessageType from(int code){
        for(MessageType cur:MessageType.values()){
          if(cur.getCode() == code){
            return cur;
          }
        }
        return null;
      }

    public class EnumTest {
    
      public static void main(String[] args){
        //常量数值转枚举类型
        MessageType curType = MessageType.from(1) ;
        switch (curType){
          case COMMENT_MESSAGE:
            //to do something
            break;
          case SYSTEM_MESSAGE:
            //to do something
            break;
          case COLLECT_MESSAGE:
            //to do something
            break;
        }
      }
    }

    重点,枚举相对于利用接口定义常量的优势

    1 信息更完善:不仅可以保存常量的值,也可以保存常量对应的解释,以及其他信息,当业务上需要在后台翻译常量含义时用处很大

    2 可进行参数校验:可以遍历某个枚举类型下所有可能的值,利用MessageType.values()可以遍历枚举内的常量

    场景举例:前台传递消息类型,后台需要判断消息类型是否有效(是否MessageType内有定义),比如前端传递消息类型是4,我需要判断这个类型和[SYSTEM_MESSAGE,COMMENT_MESSAGE,COLLECT_MESSAGE]的Code是否有相等。

    注:大型项目中使用自动工具生成枚举类

    缺点

    前端传递过来的一般是常量数值,需要调用类似于MessageType.from将常量转换到枚举变量。

    展开全文
  • 枚举定义的三种方式

    2020-10-16 10:20:18
  • 枚举定义 package com.scbd.bdpl.define.enumerate.code; import com.java.comn.assist.EnumDefine; import com.scbd.bdpl.support.annotation.AnnotationCodeType; /** * @author lp */ public enum STR ...
  • 如何使用枚举定义JAVA自定义异常类然后抛到前断呢??具体实现的思路是什么呢!!!!!!在线!!!急!!!!
  • java基础-枚举定义

    千次阅读 2019-05-13 09:49:43
    枚举类型定义 public interface OrderlEnum { enum OrderType{ Business("1","业务问题"), System("2","系统问题"), requirement("3","需求优化"), Other("4","其他"); String id; ...
  • python3 枚举定义和使用

    千次阅读 2019-06-28 17:51:00
    程序有两种方式来定义枚举类: 直接使用 Enum 列出多个枚举值来创建枚举类。 通过继承 Enum 基类来派生枚举类。 使用 使用 Enum 列出多个枚举值来创建枚举类 如下程序示范了直接使用 En...
  • 使用枚举定义常量

    千次阅读 2017-10-25 17:21:10
    package com.longshine.dataaccess.common.constant; public class ErrorCodeConstant { public static enum Msg{ ...P0201E001("E001","Startup failed, : "), ...P0201E002("E002","JobConfig jobID:{} checkMe
  • 国家枚举类 * Created by tely on 2015/8/13. */ public enum CountryEnum { COUNTRY_ENUM_CN ( "enum_country_cn" , "CN" ) , // 中国 COUNTRY_ENUM_VN ( "enum_country_vn" , "VN" ) , // 越南 ...
  • enum枚举定义转json

    千次阅读 2017-02-13 23:54:46
    需要把enum里面定义的全部枚举及其属性,转换为json,然后传到页面(作为下拉菜单key-value) http://www.baeldung.com/jackson-serialize-enums  @JsonValue  public Map toMap() {  Map map = new ...
  • 如何优雅地在JS中使用枚举定义

    千次阅读 2020-09-14 20:41:51
    定义一体化:枚举值和枚举描述写在了一起,不分散 使用方便:无需额外的过滤器 如何解释 去魔法数字 看如下代码 // bad <span v-if="status == 0">审核中</span> <span v-else-if="status == 1"&...
  • 在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举 public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter = 4 } 枚举名是不能出现空格,()-/等字符 我们想把Spring...
  • 宏定义与枚举定义冲突错误

    千次阅读 2010-08-11 16:12:00
    我在一个文件 displaynumber.h 中定义了一个枚举:class CDisplayNumber : public CStatic{ DECLARE_DYNAMIC(CDisplayNumber)public: CDisplayNumber(); virtual ~CDisplayNumber();enum NUMBER_COLOR { BLACK,...
  • java推荐使用枚举定义常量

    万次阅读 2016-06-15 16:36:08
    枚举只需要定义每个枚举项,不需要定义枚举值,而接口常量(或类常量)则必须定义值,否则编译通不过;两个引用的方式相同(都是“类名.属性”,如Season.Sprint), 但是枚举表示的是一个枚举项,字面含义是春天,...
  • 在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举  public enum Season  {  Spring = 1,  Summer = 2,  Autumn = 3,  Winter = 4  }  枚举名是不能出现空格,()-/等字符  我们...
  • 前言 在java开发中,避免不了,接口调用,及...ResponseEnum枚举类 package com.j20200424.test; public enum ResponseEnum { RP_100("100", "请求成功"), RP_400("400", "请求参数为空"), RP_401("401", ...
  • 不过,在1.5版之后有了改进,即新增了一种常量声明方式,枚举常量。代码如下:  enum Season{ Spring,Summer,Autumn,Winter; } 二、场景  那么枚举常量与我们的经常使用的类常量和
  • /// 根据枚举类型得到其所有的 值 与 枚举定义Description属性 的集合 /// /// <param name="enumType"></param> /// <returns></returns> public static NameValueCollection GetNVCFromEnumValue(Type enum...
  • var ScheduleTypeEnum = { IPI: { value: 'IPI', description: '等额本金' }, EPI: { value: 'EPI', description: '等额本息' },
  • 枚举类 [code="java"] package com.mark.java; public enum Color { 红(1, "红"), 橙(2, "橙"), 黄(3, "黄"), 绿(4, "绿"), 蓝(5, "蓝"); ...
  • C#特性学习与使用(为枚举定义Description)

    万次阅读 多人点赞 2011-10-26 02:22:45
    枚举定义 public enum MyType { [Description("A类型")] TypeA, [Description("B类型")] TypeB, [Description("C类型")] TypeC } 特性类DescriptionAttribute定义如下 [AttributeUsage...
  • 枚举定义有意义的数组下标

    万次阅读 热门讨论 2007-09-06 08:52:00
    当然有,那就是用枚举定义有意义的数组下标。  针对上面的例子,可以定义出如下的一个枚举类型: enum  ShapeIndex {  eSqure,  eRectangle,  eCircle,  eEllipse,  eShapeCount };  数组定义和...
  • enum型也被成为枚举类型,它是一种可以将多个常量分组为一个并附加一系列值的类型,使用枚举定义的常量称为枚举器列表,默认情况下,枚举器从零开始按顺序编号。本篇文章给大家介绍关于JavaScript中枚举类型的使用。...
  • 本文主要介绍了枚举类型的有关内容,涉及简单的枚举类型定义,以及枚举类型的值在Java中的定义方法,具有一定参考价值,需要的朋友可以了解下。
  • 枚举定义了一种包含一组相关值的公共类型。枚举是Swift中的一种与类类似的类型。Swift 语言的枚举类型的定义语法: enum point { //可以指定枚举的类型 enum CompassPoint :Int { case North} case North case ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 373,713
精华内容 149,485
关键字:

枚举定义