精华内容
下载资源
问答
  • 前台如何获取枚举类型

    千次阅读 2018-08-27 14:16:23
    用springmvc+fastjson如何传递枚举类型吗? 下面测试用的枚举类: 通常的做法我们只能取出A或B.... public enum TestEnum{ A(1, "1-100"), B(2,"2-200"), C(3, "3-300"), ...

    用springmvc+fastjson如何传递枚举类型吗?

    下面是测试用的枚举类:

    通常的做法我们只能取出A或B....

    public enum TestEnum{
    
        A(1, "1-100"),
        B(2,"2-200"),
        C(3, "3-300"),
        D(4, "4-400"),
        E(5, "5-500");
    
        private Integer code;
        private String desc;
    
        TestEnum(Integer code, String desc) {
            this.code = code;
            this.desc = desc;
        }
    
        public Integer getCode() {
            return code;
        }
        public String getDesc() {
            return desc;
        }
    
    }

    统一返回的包装类:

    public class Result {
    
        private Integer id;
    
        private TestEnum testEnum;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public TestEnum getTestEnum() {
            return testEnum;
        }
    
        public void setTestEnum(TestEnum testEnum) {
            this.testEnum = testEnum;
        }
    
        public Result(Integer id, TestEnum testEnum) {
            this.id = id;
            this.testEnum = testEnum;
        }
    
    }

    两种方法:

    第一种:在Controller中直接操作

    @Controller
    
    public class TestController {
    
        @RequestMapping("/")
        public String home(Model model){
            return "index";
        }
    
        @RequestMapping("/ajax")
        @ResponseBody
        public String ajax(){
            SerializeConfig config = new SerializeConfig();
            config.configEnumAsJavaBean(TestEnum.class);
            Result result = new Result(100, TestEnum.A);
            return JSON.toJSONString(result,config);
        }
    }

     

    <%@ page language="java" contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <body>
    <h2>Hello World!</h2>
    <body>
    <div>
        测试
    </div>
    <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
    <script>
        $.ajax({
            url:"/ajax",
            type:"POST",
            contentType:"application/x-www-form-urlencoded",
            success:function (data) {
                alert(data.testEnum.desc);
            }
        });
    
    </script>
    </body>
    </body>
    </html>

     

    第二种:通过toString()方法和配置文件操作

    (1)springmvc.xml添加转换配置

        <!-- 注解驱动 -->
        <mvc:annotation-driven>
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="UTF-8" index="0"/><!--避免出现乱码 -->
                    <property name="supportedMediaTypes">
                        <list>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json</value>
                        </list>
                    </property>
                    <property name="fastJsonConfig">
                        <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                            <property name="features">
                                <list>
                                    <value>AllowArbitraryCommas</value>
                                    <value>AllowUnQuotedFieldNames</value>
                                </list>
                            </property>
                            <property name="charset" value="UTF-8"/>
                            <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>
                            <property name="serializerFeatures">
                                <list>
                                    <value>WriteDateUseDateFormat</value>
                                    <!--消除对同一对象循环引用的问题,默认为false-->
                                    <value>DisableCircularReferenceDetect</value>
                                    <!--关键-->
                                    <value>WriteEnumUsingToString</value>
                                </list>
                            </property>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

     

    (2)重写枚举类的toString()

    public enum TestEnum{
    
        //省略。。。
    
        @Override
        public String toString() {
            return "{'code':'"+this.code+"','desc':'"+this.desc+"'}";
        }
    
       //不要把单引号改成\双引号,这样当返回给前端json字符串,json字符串转成对象时会报格式不正确的错误:
        // @Override
        // public String toString() {
        // return "{\"code\":"+this.code+",\"desc\":"+this.desc+"}";
        // }
    
    }

    (3)控制层

    @Controller
    
    public class TestController {
    
        @RequestMapping("/")
        public String home(Model model){
            return "index";
        }
    
        @RequestMapping("/ajax")
        @ResponseBody
        public Result ajax(){
            Result result = new Result(100, TestEnum.A);
            return result;
        }
    
    }

    (4)前台页面取值

    <%@ page language="java" contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <body>
    <h2>Hello World!</h2>
    <body>
    <div>
        测试
    </div>
    <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
    <script>
    
        $.ajax({
            url:"/ajax",
            type:"POST",
            contentType:"application/x-www-form-urlencoded",
            success:function (data) {
                alert(data);
                var jsonObject =eval("("+ data +")");
                alert(jsonObject.testEnum);
                var testEnum = jsonObject.testEnum;
                var em =eval('('+ testEnum +')');
                //这一步使用“var em =JSON.parse(testEnum);”也会发生错误。
                alert(em.desc);
            }
        });
    </script>
    </body>
    </body>
    </html>
    

    师兄说:饥饿能让脑子变清醒!每当迷茫的时候,他都会饿自己两天,之后就知道自己到底想要什么了。

    我最近也迷茫了,照做了。师兄没有骗我,饿了两天后,我也清楚的认识到自己究竟想要什么啦。我想要吃饭。

     

    展开全文
  • 枚举类型的初始问题

    千次阅读 2018-12-17 22:10:03
    枚举类型是内置类型吗?型的的初始化规则是什么? 首先记住两点: 1、内置类型变量(int,bool,指针等)的初始化规则 在函数体外(全局)定义的内置类型变量会自动初始化0,函数体内定义的内置类型变量不会初始化。...

    枚举类型是内置类型吗?型的的初始化规则是什么?

    首先记住两点:

    1、内置类型变量(int,bool,指针等)的初始化规则
    在函数体外(全局)定义的内置类型变量会自动初始化0,函数体内定义的内置类型变量不会初始化。类里面定义的内置类型变量不会自动初始化。
    2、类类型变量的初始化是调用构造函数(不论是全局还是局部)。类类型变量的类类型成员自然也是调用其构造函数初始化。类类型变量的内置类型成员如第一条所说,不会自动初始化,需要你在初始化列表或构造函数里面初始化。

    枚举类型就是是不是内置类型,我是觉得可以算,他不就是一无符号(短、长)整形嘛。

    另外注意:枚举类型占用的字节数,是根据枚举值的范围决定的(当然也取决于编译器),如果用char型就能覆盖枚举的所有值,就不会用unsigned int型。但不会超过int型字节数。

    枚举值的缺省值是0,不是枚举的第一个值。当然前提是全局变量的情况下才能保证。其他情况,其值是不定的,而且不限定于所列出的枚举值。

    举例如下:

    enum Status
    {
    running = 3,
    stop,
    error
    };
    class Car
    {
    public:
    Status s;
    };
    Status gs;
    Car gc;
    int main()
    {
    Status s1;
    Car c1;
    std::cout << “gs :” << gs << std::endl;
    std::cout << “gc.s:” << gc.s << std::endl;
    std::cout << “s1 :” << s1 << std::endl;
    std::cout << “c1.s:” << c1.s << std::endl;
    std::cout << “size:” << sizeof(Status) << std::endl;
    return 0;
    }

    打印输出:

    C:/WINDOWS/system32/cmd.exe /c ./a.exe
    gs :0
    gc.s:0
    s1 :2
    c1.s:9
    size:4


    原文:https://blog.csdn.net/coobeara/article/details/1644548

    展开全文
  • 文章转载自:http://www.cctry.com/thread-289877-1-1.html这其实一个老生常谈的问题,之前的编程过程中也经常的需要用到枚举类型,针对枚举类型的成员的一般也从0开始累加,也没太注意一些细节。...

    文章转载自:http://www.cctry.com/thread-289877-1-1.html

    这其实是一个老生常谈的问题,之前的编程过程中也是经常的需要用到枚举类型,针对枚举类型的成员的值一般也是从0开始累加,也没太注意一些细节。
    在咱们VC驿站的《实用C++》新手入门教程的第26课中,也给大家讲解了什么是枚举类型,详情地址在这里,新手可以过去温习下:
    http://www.cctry.com/thread-289359-1-1.html

    那么今天咱们就来讨论下,枚举类型中的成员的值到底支不支持负数?如果支持负数的话成员的取值范围又是多少呢?
    针对这个问题我也到网上找了找资料,说什么的都有,有的说不支持负数,有的说支持。哎,真是说什么的都有,具体找C++的标准文档也暂时没找到,于是,今天咱们就自己试试吧,实践出真知嘛,对不对!

    环境:Microsoft Windows 7 + Visual Studio 2013 With Update 5

    我们添加如下一个枚举类型的测试代码:

    1. enum E32Test
    2. {
    3.         E32Test_1 = -5,
    4.         E32Test_2,
    5.         E32Test_3
    6. };

    7. int main(int argc, char* argv[])
    8. {
    9.         int var = E32Test_1;
    10.         cout << "var = " << var << endl;
    11.         return 0;
    12. }
    复制代码


    打印的结果如下图:
    C++中的枚举类型支持负数吗?取值范围是多少? 
    看到了吧,看来枚举类型确实是支持负数的。好,咱们的第一个问题解决了。

    第二个问题,既然枚举支持负数的话,那么取值范围又是多少呢?我们再来测试一下,网上有的网友说枚举类型的取值范围就是带符号的 int 类型的取值范围,那么是不是呢?
    默认 VS2013 中微软提供给我们一些事先定义好的宏,包含了各个类型的取值范围,都在 limits.h 文件中了。其中 32 位的 有符号的 int 类型的最大值就是:
    1. #define _I32_MAX      2147483647i32 /* maximum signed 32 bit value */
    复制代码

    最小值就是这个:
    1. #define _I32_MIN    (-2147483647i32 - 1) /* minimum signed 32 bit value */
    复制代码


    接下来,我们加上如下的测试代码:
    1. enum E32Test
    2. {
    3.         E32Test_0 = _I32_MIN,
    4.         E32Test_1 = -5,
    5.         E32Test_2,
    6.         E32Test_3,
    7.         E32Test_4 = _I32_MAX
    8. };

    9. int main(int argc, char* argv[])
    10. {
    11.         int var_min = E32Test_0;
    12.         int var_max = E32Test_4;
    13.         cout << "var_min = " << var_min << endl;
    14.         cout << "var_max = " << var_max << endl;
    15.         return 0;
    16. }
    复制代码

    编译正常通过,没有任何警告,之后我们执行程序,打印的结果如下图:
    C++中的枚举类型支持负数吗?取值范围是多少? 

    也是正确的哦,这里面正确不能说明最大值和最小值就是 _I32_MAX 和 _I32_MIN,我们再将枚举类型的代码改下:
    enum E32Test
    {
            E32Test_0 = _I32_MIN - 1,
            E32Test_1 = -5,
            E32Test_2,
            E32Test_3,
            E32Test_4 = _I32_MAX + 1
    };

    最小值再用 _I32_MIN - 1,最大值再用 _I32_MAX + 1,看看怎么样呢?
    我们直接编译下源码,结果得到如下图警告:
    C++中的枚举类型支持负数吗?取值范围是多少? 
    所以 VS2013 就明确的告诉我们了,说这个 + 和 - 的操作都超出范围了。于是我们就可以确定,枚举类型的最大和最小值就是 有符号的 int 类型的最大和最小值。

    既然答案已经确定了,原本这次实践就应该结束了。但是我又转念一想,当前工程是Win32格式的,也就是说是 x86 体系的 32 位程序。如果我把工程改成 x64 位平台下的程序呢?枚举类型的最大最小值会不会变成 64 位平台下的 有符号的 int 类型最大和最小值呢?
    我们不妨来继续实践下试试吧。

    在当前工程的编译选项上添加 x64 位平台编译,如下图:
    C++中的枚举类型支持负数吗?取值范围是多少? 

    x64 位平台下的 有符号 int 整型的最大值和最小值的宏是:
    1. /* minimum signed 64 bit value */
    2. #define _I64_MIN    (-9223372036854775807i64 - 1)
    复制代码

    1. /* maximum signed 64 bit value */
    2. #define _I64_MAX      9223372036854775807i64
    复制代码


    接下来,我们再定义一个针对 x64 位的枚举类型,代码如下:
    1. enum E64Test
    2. {
    3.         E64Test_0 = _I64_MIN,
    4.         E64Test_1 = -5,
    5.         E64Test_2,
    6.         E64Test_3,
    7.         E64Test_4 = _I64_MAX
    8. };
    复制代码


    编译,结果,直接报出了警告,如下图:
    C++中的枚举类型支持负数吗?取值范围是多少? 

    所以,我们得到的最终结论就是,不管在 32 位平台下,还是在 64 位平台下,枚举类型的取值范围都是 32 位的有符号的 int 类型的最大最小值。

    好了,答案已经有了。基本测试我们也都做完了,文章就到这里吧,相关的工程源码在附件中,感兴趣的童鞋可以下载学习。有什么疑问跟帖交流哦!
    展开全文
  • 11 枚举类型

    2019-09-07 16:56:39
    枚举指的在一定范围内取值,这个必须是枚举类型中的任意一个,而且只能取一个 枚举的特点: 1.必须在规定的范围内取值 2.这个只能取一个 枚举的本质就是一个类 枚举类型成员特点 枚举既然本质一个类,那么枚举...

    枚举类型概述

    枚举指的是在一定范围内取值,这个值必须是枚举类型中的任意一个,而且只能取一个
    枚举的特点:
    1.必须在规定的范围内取值
    2.这个值只能取一个
    枚举的本质就是一个类

    枚举类型成员特点

    枚举既然本质是一个类,那么枚举里面有没有 成员变量,成员方法,构造方法,静态方法,抽象方法? 有的话又有意义吗?
    1.枚举的构造方法必须私有
    2.枚举当中默认有一个私有的无参构造方法,如果你写了一个带参的构造方法,那么会覆盖无参构造方法,所以编译报错
    3.枚举里面的抽象方法是有意义的,其他成员没有意义
    4.枚举的前面必须是枚举的常量成员
    作业: 使用枚举来描述一个星期有多少天
    并且要求使用枚举的响应方法来告诉是星期几
    switch语句中可以是枚举类型

    枚举类型方法

    String name() 返回枚举的名称
    int ordinal() 返回枚举的索引
    static <T extends Enum\<T>> T valueOf(Class\<T> enumType, String name) 返回枚举对象
    valueOf(String name) 生成枚举对象
    values() 返回所有的枚举对象的数组
    要求大家能够将枚举的 对象/ 索引 / 名称 进行相互转换
    
    示例代码:
    public class EnumDemo04 {
    		public static void main(String[] args) {
    		// 获取枚举对象
    //		Weekend w = Weekend.valueOf(Weekend.class, "MONDAY");
    //		System.out.println(w);		
    //		// 获取枚举对象
    //		Weekend w2 = Weekend.MONDAY;
    //		System.out.println(w2);		
    //		// 获取枚举对象
    //		Weekend w3 = Weekend.valueOf("MONDAY");
    //		System.out.println(w3);
    //		medhod1();
    //		method2();
    //		method3();
    	}
    1.已知枚举对象,获取枚举的名称和索引
    	public static void medhod1() {
    		Weekend w = Weekend.TUESDAY;
    		String name = w.name();
    		int index = w.ordinal();
    		System.out.println(w);
    		System.out.println(name);
    		System.out.println(index);
    	}
    2.已经枚举的名称,获取到枚举的对象和下标
    	public static void method2() {
    		String name = "MONDAY";
    		Weekend w = Weekend.valueOf(name);
    		int index = w.ordinal();
    		System.out.println(name);
    		System.out.println(w);
    		System.out.println(index);
    	}
    3.已知枚举的下标,获取到枚举的名称和枚举对象
    	public static void method3() {
    		int index = 2;
    		Weekend[] ws = Weekend.values();
    		Weekend w = ws[index];
    		String name = w.name();
    		System.out.println(index);
    		System.out.println(w);
    		System.out.println(name);
    	}
    }
    
    展开全文
  • C++ enum枚举类型详解 《enum枚举用法攻略》一节已经介绍过枚举数据类型,还记得吗?它们由程序员定义的数据类型,由一组称为枚举量的组成,枚举量代表整数常量。本节将进一步介绍枚举数据类型的应用,以及使用...
  • 称enum WEEKDAY为枚举类型,称w为枚举变量,称Monday等为枚举(好像也有叫枚举常量的). 追问: 那么w枚举变量所对应的,Monday等枚举吗? 追答: 的。比如可以这么用: w = Monday; switch (w){ case Monday:...
  • Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的的有限集合创建为一种新的类型,而这些具名的可以作为常规的程序组件使用,这一种非常有用的功能。本文将深入分析枚举的源码,看一看...
  • 有人会很疑惑, 都已经是枚举类型了, 还需要校验吗? 其实这边更确切的说法(应用场景), String对象映射为枚举的校验, 如何来实现. 在Dubbo(RPC服务)中, 并不推荐枚举类型作为参数, 原因涉及枚举类型特殊的序列...
  • 数据库模型与枚举类型进行关联调用,这样可以很清楚的知道状态,只需要在代码层就能知道有哪些,无需查询数据库,都有哪些可取。 例如: <ul><li> 状态:0:禁用&#...
  • 1. 代码里变量booktitle, title, author, year, isbn用来存放他们的对应,在其他方法里也用到了 2. Java代码 String[] input = readAllFile(f).replaceAll(" ", ";").split(";"); 这里replace完再split确实没...
  • 刚开始的时候我以为项目的拦截器会将字段+1,经过debug之后发现,当你从前台传递一个数值类型给后台的枚举类型的时候,后台并不是根据枚举成员的value进行绑定的,而是根据枚举的ordinal。 啥意思呢?如下: 我...
  • 枚举

    2019-11-14 22:10:40
    枚举指的在一定范围内取值,这个必须是枚举类型中的任意一个,而且只能取一个 枚举的特点: 1.必须在规定的范围内取值 2.这个只能取一个 枚举的本质就是一个类 枚举既然本质一个类,那么枚举里面有没有 成员...
  • 枚举在开发中经常用到,可以表示一种事物的几种不同状态或者类型等,于是我们通常要根据当前的状态来和枚举元素进行比较来得到当前什么状态,但是我发现一个问题,枚举值的比较真的按照我们给枚举赋的来单纯地...
  • 枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变量 声明枚举的一般语法: enum <enum_name> { enumeration list }; 其中, enum_name...
  • 在本文中,我们将看到什么 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式。 enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承java.lang.Enum类,更多内容可以自行...
  • C 语言中布尔的候选类型是什么?为什么它不是一个标准类型?我应该用#define 或enum 定义true 和false 吗? C 语言没有提供标准的布尔类型, 部分因为选一个这样的类型涉及最好由程序员决定的空间/时间折衷。...
  • 对于这种单值类型的静态常量定义,本身也没错,主要在使用的地方没有一个明确性的约束而已,比如: 比如这里的 judgeVideoStatus 函数的本意传入 VideoStatus 的三种静态常量之一,但由于没有类型上的约束,因此...
  • 比如以下代码会进行装箱/拆箱的操作,从而产生性能上的开销。...那么我想问的枚举进行显式类型转换时,比如以下代码: directionByte = (byte)myDirection; 1、会发生装箱/拆箱的操作吗? 2、会产生性能的开销吗?
  • 它可以同时拥有多个,如同时具有 ReadOnly、Hidden、System 这些属性,但它的类型只是一个枚举类型,那么它如何实现同时具有多的呢?大家知道,枚举的每一项的实际只是一个数字,默认情况下每一项都顺序...
  • Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的的有限集合创建为一种新的类型,而这些具名的可以作为常规的程序组件使用,这一种非常有用的功能。本文将深入分析枚举的源码,看一看...
  • iOS 的枚举

    2015-05-26 23:20:16
    不就是 C 吗? 的,就是 C,所以你用 C 的枚举定义方式 OK 带。...MyType 是枚举类型的名称。它的可能就是 TypeA、TypeB、TypeC、TypeD,其中 TypeA 的就是 0,依次其他的就是 1、2、3。
  • 枚举定义了一组具有相关性的数据,开发者可以再带吗中以一个安全的方式来使用这些,以又助于提供代码的可读性。 在Swift中,枚举可以分成两种:任意类型枚举和指定类型枚举,结构如下: //任意类型枚举 ...
  • 枚举定义了一组具有相关性的数据,开发者可以再带吗中以一个安全的方式来使用这些,以又助于提供代码的可读性。 在Swift中,枚举可以分成两种:任意类型枚举和指定类型枚举,结构如下://任意类型枚举 ...
  • java 类型转换

    2016-10-07 23:05:00
    ·枚举类型是引用类型。枚举不属于原始数据类型,它的每个具体都 引用一个特定的对象。相同的则引用同一个对象。可以使用“==” 和equals()方法直接比对枚举变量的,换句话说,对于枚举类型的 变量,“==”和...
  • Java类型装换

    2016-10-08 09:39:00
    1.仔细阅读示例: EnumTest.java,运行它,查看运行结果?...可以使用“==” 和equals()方法直接比对枚举变量的,换句话说,对于枚举类型的 变量,“==”和equals() 方法执行的结果等价的。...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 157
精华内容 62
关键字:

枚举类型是值类型吗