精华内容
下载资源
问答
  • 枚举与宏区别

    千次阅读 2014-01-21 15:26:59
    同样的数值范围,但是枚举通常都是表示常数变量,对枚举变量做一些算术计算通常是编译器不允许的,但是可以加上强制类型转换,本来不在枚举符表里面的值也可以大摇大摆的登堂入室,枚举符表甚至允许数值相等。...

    枚举:

    枚举是一种变量类型,枚举基本等效于int类型,占用同样的空间,同样的数值范围,但是枚举通常都是表示常数变量,对枚举变量做一些算术计算通常是编译器不允许的,但是可以加上强制类型转换,本来不在枚举符表里面的值也可以大摇大摆的登堂入室,枚举符表甚至允许数值相等。在没有赋值的引用中,只会是int范围内的垃圾数值,根本就不会是枚举符表中的数值。对于默认的情况,enum符表从0开始计数,除非用=赋值,否则就是前项的+1。使用枚举类型的最大好处是使得程序可读性增强!!

    宏:

    宏定义只是在程序的开头定义了一个字符常量它并不分配内存空间,所以根本不占用内存,它只是在程序预编译的时候,给常量赋一个固定的值,当程序中遇到这个字符常量时就会知道它就是预编译时被赋的那个值,代入运算就可以了,这个值在程序中是不能被改变的,只有在宏定义中才能改变,改变了之后,程序中所以出现此常量的地方都会改变,所以这就给写程序带来了方便,但宏永远仅仅只是编译器的代码替换功能,如果用的好却可以做出来那么华丽丽的效果,但要是用不好就是自己打自己的脸了!

    枚举常量与宏的主要区别:
    1.枚举常量是实体中的一种,但宏不是实体;
    2.枚举常量属于常量,但宏不是常量(字符常量);
    3.枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符。枚举类型主要用于限制性输入,例如,某个函数的某参数只接受某种类型中的有限个数值,除此之外的其它数值都不接受,这时候枚举能很好地解决这个问题。能用枚举尽量用枚举,否则在调试的时候你是看不到当时的值的。
    4.用宏去定义一个变量如果你定义了一个相同的变量那么要看谁在前面,如果宏在前面变量会产生编译错误,而且这个错误很难查找,如果那个宏隐藏的很深的话。如果你定义的变量在前那么更可怕了,直接没有错误,但是宏定义被自定义的变量悄悄替换了。用枚举定义的话不管你定义的顺序前后关系怎样都会产生重复定义的错误。从上面的举例来看枚举比宏好用的多。宏还有一个特性是没有作用域,这里的作用域是指宏定义以后的代码都可以使用这个宏。宏可以被重复定义这个可能导致宏的值被修改。所以建议不要用宏去定义整形的变量,用枚举或者const。又会有用const还是枚举呢,世界一向如此纠结,枚举只能表示整形,const可以修饰任何类型。整形的情况下如果你要定义几种有关系的数值那么用枚举,否则用const。

    5.枚举可以一次定义大量相关的常量,而宏只能定义一个。

    6.枚举和宏的作用时间和存储形式不同。

    展开全文
  • js中json及枚举

    2019-06-14 13:08:22
    一. js里面的json JSON的语法可以表示以下三种类型的值 (1) 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和...而每个键值对中的值可以是简单值,也可以是复杂数据类型的值 var i...

    一. js里面的json

    JSON的语法可以表示以下三种类型的值

    (1) 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。
    注意:JSON字符串必须使用双引号(单引号会导致语法错误)

         "小张"
    

    (2)对象:对象作为一种复杂数据模型,表示的是一组无序的键值对。而每个键值对中的值可以是简单值,也可以是复杂数据类型的值

         var info = {
        "name": "毛豆",
        "sex": 23,     
    };
    

    (3)数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组
    注意:JSON数组也没有变量和分号。把数组和对象结合起来,可以构成更复杂的数据集合

        var info = {
        "name": "毛豆",
        "sex": 23,
        "hobby": [
            {"name": "篮球", "color": "red"},
            {"name": "乒乓球", "color": "blue"},
            {"name": "棒球", "color": "yellow"},
            {"name": "足球", "color": "green"}
        ]
    }
    

    二.json对象

    1.stringify()

    stringify()把一个JavaScript对象序列化为一个JSON字符串
    默认情况下,JSON.stringify()输出的JSON字符串不包含任何空格字符或缩进

    var str = JSON.stringify(info);
    console.log(str);
    

    2.parse()

    将JSON字符串直接传递给JSON.parse()就可以得到相应JavaScript值

    var str = JSON.stringify(info);
    console.log(JSON.parse(str));
    
    展开全文
  • 苏嵌学习之枚举和宏

    千次阅读 2012-05-10 10:23:53
    同样的数值范围,但是枚举通常都是表示常数变量,对枚举变量做一些算术计算通常是编译器不允许的,但是可以加上强制类型转换,本来不在枚举符表里面的值也可以大摇大摆的登堂入室,枚举符表甚至允许数值相等。...
    枚举:

    枚举是一种变量类型,枚举基本等效于int类型,占用同样的空间,同样的数值范围,但是枚举通常都是表示常数变量,对枚举变量做一些算术计算通常是编译器不允许的,但是可以加上强制类型转换,本来不在枚举符表里面的值也可以大摇大摆的登堂入室,枚举符表甚至允许数值相等。在没有赋值的引用中,只会是int范围内的垃圾数值,根本就不会是枚举符表中的数值。对于默认的情况,enum符表从0开始计数,除非用=赋值,否则就是前项的+1。使用枚举类型的最大好处是使得程序可读性增强!!

    宏:

    宏定义只是在程序的开头定义了一个字符常量它并不分配内存空间,所以根本不占用内存,它只是在程序预编译的时候,给常量赋一个固定的值,当程序中遇到这个字符常量时就会知道它就是预编译时被赋的那个值,代入运算就可以了,这个值在程序中是不能被改变的,只有在宏定义中才能改变,改变了之后,程序中所以出现此常量的地方都会改变,所以这就给写程序带来了方便,但宏永远仅仅只是编译器的代码替换功能,如果用的好却可以做出来那么华丽丽的效果,但要是用不好就是自己打自己的脸了!

    枚举常量与宏的主要区别:
    1.枚举常量是实体中的一种,但宏不是实体;
    2.枚举常量属于常量,但宏不是常量(字符常量);
    3.枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符。枚举类型主要用于限制性输入,例如,某个函数的某参数只接受某种类型中的有限个数值,除此之外的其它数值都不接受,这时候枚举能很好地解决这个问题。能用枚举尽量用枚举,否则在调试的时候你是看不到当时的值的。
    4.用宏去定义一个变量如果你定义了一个相同的变量那么要看谁在前面,如果宏在前面变量会产生编译错误,而且这个错误很难查找,如果那个宏隐藏的很深的话。如果你定义的变量在前那么更可怕了,直接没有错误,但是宏定义被自定义的变量悄悄替换了。用枚举定义的话不管你定义的顺序前后关系怎样都会产生重复定义的错误。从上面的举例来看枚举比宏好用的多。宏还有一个特性是没有作用域,这里的作用域是指宏定义以后的代码都可以使用这个宏。宏可以被重复定义这个可能导致宏的值被修改。所以建议不要用宏去定义整形的变量,用枚举或者const。又会有用const还是枚举呢,世界一向如此纠结,枚举只能表示整形,const可以修饰任何类型。整形的情况下如果你要定义几种有关系的数值那么用枚举,否则用const。

    展开全文
  • mybatis枚举自动转换实现

    万次阅读 热门讨论 2016-05-29 04:11:17
    就拿设置成数字来说,假如1对应是学生,2对应是教师,在java里面定义成这样的枚举,但是一般使用mybatis查出来话,我们想要让它自动装换成我们想要的枚举,不需要再手动根据数值去判断设置成我们想要的枚举。...

    前言

               在设计数据库的时候,我们有时候会把表里的某个字段的值设置为数字或者为英文来表示他的一些特殊含义。就拿设置成数字来说,假如1对应是学生,2对应是教师,在java里面定义成这样的枚举,但是一般使用mybatis查出来的话,我们想要让它自动装换成我们想要的枚举,不需要再手动根据数值去判断设置成我们想要的枚举。要是实现这样的效果,那么我们就要用到mybatis的BaseTypeHandler了。

               

    BaseTypeHandler介绍

                 让我们来看看要继承BaseTypeHandler这个抽象类,需要覆写哪些方法:

      public abstract void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
    
      public abstract T getNullableResult(ResultSet rs, String columnName) throws SQLException;
    
      public abstract T getNullableResult(ResultSet rs, int columnIndex) throws SQLException;
    
      public abstract T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException;

    实现了这些抽象类,当得到结果集的时候,程序就会回调这些方法,例如根据名称获取当前行的某一列的值,那么就会直接回调getNullableResult(ResultSet rs, String columnName)这个方法,根据名称得到当行的当前列的值,然后我们在这里去调用枚举,匹配枚举中的每一个值,相等的话直接返回该枚举,达到自动转换成我们想要的枚举的效果。其他的重载方法类似,只不过是有些根据列索引,有些根据列名称做枚举自动转换而已。

    好了,介绍就到这里,让我们来看看具体实现。。



    自动转换实现例子

    创建数据库表



    创建枚举

    package net.itaem.less;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author: Fighter168
     */
    public enum PersonType{ 
    	STUDENT("1","学生"),
    	TEACHER("2","教师");
    	
    	private String value;
    	private String displayName;
    	
    	static Map<String,PersonType> enumMap=new HashMap<String, PersonType>();
    	static{
    		for(PersonType type:PersonType.values()){
    			enumMap.put(type.getValue(), type);
    		}
    	}
    	
    	private PersonType(String value,String displayName) {
    		 this.value=value;
    		 this.displayName=displayName;
    	}
    	
    	public String getValue() {
    		return value;
    	}
    	public void setValue(String value) {
    		this.value = value;
    	}
    	public String getDisplayName() {
    		return displayName;
    	}
    	public void setDisplayName(String displayName) {
    		this.displayName = displayName;
    	}
    	
    	public static PersonType getEnum(String value) {
    		return enumMap.get(value);
    	}
    }
    




    创建Po实体类

    /**
     * @author: Fighter168
     */
    public class Person {
    	private String id;
    	private String name;
    	//枚举
    	private PersonType personType;
            //set get 方法。。
    }


    创建Dao接口

    创建一个简单的测试dao,这里简单的提供一个测试的查询方法。

    /**
     * @author: Fighter168
     */
    public interface PersonDao {
    
    	public List<Person> query();
    
    }

    创建枚举转换处理器

    package net.itaem.handler;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import net.itaem.less.PersonType;
    
    import org.apache.ibatis.type.BaseTypeHandler;
    import org.apache.ibatis.type.JdbcType;
    
    /**
     * @author: Fighter168
     */
    public class PersonTypeHandler extends BaseTypeHandler<PersonType>{
    
    	private Class<PersonType> type;
    
        private  PersonType[] enums;
        
        /**
         * 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现
         * @param type 配置文件中设置的转换类
         */
        public PersonTypeHandler(Class<PersonType> type) {
            if (type == null)
                throw new IllegalArgumentException("Type argument cannot be null");
            this.type = type;
            this.enums = type.getEnumConstants();
            if (this.enums == null)
                throw new IllegalArgumentException(type.getSimpleName()
                        + " does not represent an enum type.");
        }
    
        @Override
        public PersonType getNullableResult(ResultSet rs, String columnName) throws SQLException {
            // 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型
            String i = rs.getString(columnName);
            if (rs.wasNull()) {
                return null;
            } else {
                // 根据数据库中的value值,定位PersonType子类
                return PersonType.getEnum(i);
            }
        }
    
        @Override
        public PersonType getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            // 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型
        	 String i = rs.getString(columnIndex);
            if (rs.wasNull()) {
                return null;
            } else {
            	 // 根据数据库中的value值,定位PersonType子类
                return PersonType.getEnum(i);
            }
        }
    
        @Override
        public PersonType getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        	 // 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型
       	 String i = cs.getString(columnIndex);
           if (cs.wasNull()) {
               return null;
           } else {
           	 // 根据数据库中的value值,定位PersonType子类
               return PersonType.getEnum(i);
           }
        }
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, PersonType parameter, JdbcType jdbcType)
                throws SQLException {
            // baseTypeHandler已经帮我们做了parameter的null判断
            ps.setString(i, parameter.getValue());
    
        }
    	
    }
    



    创建Mapper映射文件

    PersonDao对应的PersonMapper映射文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="net.itaem.dao.PersonDao" >
      
      <resultMap id="resultMap" type="net.itaem.po.Person" >
    	    <result column="id" property="id" jdbcType="CHAR" />
    	    <result column="name" property="name" jdbcType="CHAR" />
    	    <result column="type" property="personType" jdbcType="CHAR" />
      </resultMap>
     
     <select id="query"  resultMap="resultMap">
     	select * from person
     </select>
      
    </mapper>
    其实handler还可以写在PersonMapper.xml这里,写成下面这样:

    	    <result column="type" property="personType"  typeHandler="net.itaem.handler.PersonTypeHandler"/>





    创建Spring的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    	 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    	     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    	     <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    	     <property name="username" value="root"/>
    	     <property name="password" value="123abc"/>
    	     <!-- 连接池启动时候的初始连接数 -->
    	     <property name="initialSize" value="10"/>
    	     <!-- 最小空闲值 -->
    	     <property name="minIdle" value="5"/>
    	     <!-- 最大空闲值 -->
    	     <property name="maxIdle" value="20"/>
    	     <property name="maxWait" value="2000"/>
    	     <!-- 连接池最大值 -->
    	     <property name="maxActive" value="50"/>
    	     <property name="logAbandoned" value="true"/>
    	     <property name="removeAbandoned" value="true"/>
    	     <property name="removeAbandonedTimeout" value="180"/>
    	</bean>
    	
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    		<property name="configLocation" value="classpath:/resource/cfg.xml"/>
    		<property name="dataSource" ref="dataSource"/>
    	</bean>
     
    	 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		 <property name="basePackage" value="net.itaem.dao"/> 
    	 </bean>
    </beans>

    创建mybatis的配置文件

    下面是为mybatis创建配置文件cfg.xml

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE configuration  
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
      "http://mybatis.org/dtd/mybatis-3-config.dtd">  
    <configuration>  
        <typeHandlers>
       	 <typeHandler handler="net.itaem.handler.PersonTypeHandler"
       		 javaType="net.itaem.less.PersonType" jdbcType="CHAR"/>
        </typeHandlers>
        <!-- mapping 文件路径配置 -->  
        <mappers>  
            <mapper resource="resource/PersonMapper.xml" />  
        </mappers>  
    </configuration>

    创建测试用例

    /**
     * @author: Fighter168
     */
    public class SpringTest {
    
    	public static void main(String[] args) {
    		ApplicationContext context=new ClassPathXmlApplicationContext("resource/ApplicationContext.xml");
    		PersonDao personDao=(PersonDao) context.getBean("personDao");
    		List<Person> list=personDao.query();
    		for(Person p:list){
    			System.out.println(p.toString());
    		}
    	}
    }

    测试结果展示

    结果是成功自动转换成了我们想要的枚举




    万能枚举转换处理器?

                 也许我们还在想,如果我们有几十个枚举,这样转换的话,那我们岂不是要分别为每一个枚举定义一个Handler,然后为每一个Handler注册。其实不必这样,我们可以定义成一个通用的枚举转换处理器,具体怎么实现呢,下一篇博客我会告诉大家   mybatis枚举自动转换(通用转换处理器实现)



    展开全文
  • enumerate() 返回的迭代器的`__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过迭代 iterable 获得的值。 start参数不是从列表的第start个元素开始,而是计数值从start开始。 In ...
  • 类型 和引用类型

    2017-09-03 17:11:25
    C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。 C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串string。 string运算看起来像值类型其实是运算符重载的结果...
  • c++诟病

    2013-03-19 20:15:37
    无法自动枚举里面的各个数值 当然你可以这么写 enum AudioMsgState { Msg_None, Msg_Loading, Msg_Max } 这样写来表示出当前最大, 但是如果是底下这种情况就比较悲剧了 enum AudioMsgState { Msg_...
  • switch(A),括号中A取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、string(jdk1.7后加入)还有枚举;需要强调是:long是不能用在switch上。 case(B),括号中B只能是常量,...
  • C#第二讲

    2015-10-28 17:29:00
    一、值类型,引用类型 1、值类型:所有数值类型是值类型(int,float,double,枚举,布尔类型,结构,引用的地址,...等数值型值) A、所有的值类型是储存在栈里面。... A、引用类型的值储存在堆里面的,栈里面...
  • 1.类型 --所有的数值类型 --字符类型 --逻辑类型 --枚举类型 --结构类型 直接将数据存储在栈里变量空间里面 2.引用类型 --数值类型 --指针类型 变量声明在栈里面,真实对象()存储在堆里面,栈里面的变量 ...
  • 2015-10-26 c#2

    2015-10-31 17:34:00
    二.值类型和引用类型 2.1 值类型:所有的数值类型都是值类型(short int long float double ...),枚举... 2.2.1 引用类型的值是储存在堆里面的,栈里面储存的只是它的引用地址. 2.2.2 引用类型的赋值,实际上就...
  • 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
  • CompareValidator

    2014-11-03 15:02:00
    CompareValidator 将由用户输入到输入控件的值与输入到其他输入控件的值或常数值进行比较。 主要用到的操作如下:ControlToValidate获取或设置要验证的输入控件ControlToCompare获取或设置要与所验证的输入控件进行...
  •  给定一个1*n地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3.  这道题思路: 状态:  f[i][j] 代表当前 i ->...
  • 数据类型

    2020-10-08 11:11:30
    类型:数值类型、bool型、枚举、结构体、可空类型、用户定义结构体 数据类型类型表: 当您声明一个 int 类型时,系统分配内存来存储。 int x=15; 变量本质 :内存里面分配一个空间(大小) 引用类型包含:...
  • 字典表设计

    2019-09-29 22:05:09
    为什么字典表?...一般的业务系统客户端与用户交互的时候都会使用下拉框组件,对于某些比较固定的值的下拉组件的数据来源一般都是比较固定的一类数值。 如何解决 有的做法是使用枚举或者Consta...
  • C#札记

    2016-02-26 14:13:44
    变量属于局部变量(如:在某个方法里面定义),则如果不显示赋值去使用话,则会报编译错误 如果是变量属于类成员,则变量是会有默认值(如果没有显示赋值)。 1.引用类型默认值为null 2.int等数值类型为...
  • 函数解释 enumerate(iterable, start=0... enumerate() 返回的迭代器的 __next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)和通过迭代 iterable 获得的值。 举例 seasons = ['Spring', 'S...
  • 利用dfs先枚举出所有可能情况,当数组a[i]a[i]a[i]中被标记的数值达到mmm后,表示已经舍弃了mmm个,在剩下n−mn-mn−m个值里面dp就行了。 在dp过程,由于题目数据范围可知,所有砝码和一定不超过2000,所以...
  • 中位数定义为所有从小到大排序后排在正中间的那个数,如果有偶数个,通常取最中间的两个数值的平均数作为中位数。 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。 首先,...
  • 数据字典表设计

    2021-04-02 20:48:46
    一般的业务系统客户端与用户交互的时候都会使用下拉框组件,对于某些比较固定的值的下拉组件的数据来源一般都是比较固定的一类数值。 解决方案 有的做法是使用枚举或者Constants常量类来实现,这种情况下在量少的...
  • 题意: 当n在(x,y)范围内取整数值时,判定表达式n^2+n+41的值是否都为素数。 解题思路:将表达式的各个值储存在一个数组里面,再判断是否都为素数。 细节处理:当x和y同时为0时,不进行循环,应用break函数来实现...
  • CF_448D 二分

    2014-07-18 12:05:00
    n和m为一个矩阵的行和列,都从1开始,矩阵的每个元素的值即为 i*j(行*列),求里面第k个数 还想找什么规律,发现虽然矩阵里面很有规律,但是n 和m在不断变化 根本不好找 其实元素从 1 到 n*m,直接二分,每次二分...
  • 号,进入资源选择器,但现在这里面是空。所以下面我 们需要给该工程添加外部资源。 7.添加资源有两种方法。一种是直接添加系统提供资源文件,然后选择所需图 标。另一种是自己写资源文件。我们主要介绍第一种。...
  • HDU 5358 First One

    千次阅读 2015-08-06 21:22:27
    这题你必须严格地写出O...首先枚举log(SUM)log(SUM)的值,从1~33,每次固定左端点ii,然后用尺取法枚举出符合位数的SUM[l,r]SUM[l,r],这里面的sum的对数值相同,可以直接统一计算。 所以总体复杂度为O(nlog(n))O(nlo
  • 20 不可修改对象const+对象:对象里面值不能修改;函数+const,保证这个函数不修改任何成员变量;void f()和void f() const构成重构函数,因为参数类型不同,一个是f(A* this),一个是f(const A* this);初始化...
  • java 面试题 总结

    2009-09-16 08:45:34
    在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

枚举里面数值的值