前人所做的 java中枚举类型的自增:

链接 : https://www.h5w3.com/177055.html

 1 enum MSG_TYPE {
2 MSG_LOGIN(500),
3 MSG_LOGOUT,
4 MSG_REGISTER,
5 MSG_SEARCH,
6 MSG_ADD(600);
7
8 private int value;
9
10 private static int nextValue;
11
12 MSG_TYPE(){
13 this(Counter.nextValue);
14 }
15
16 MSG_TYPE(int value){
17 this.value = value;
18 Counter.nextValue = value + 1;
19 }
20
21 public int getValue()
22 {
23 return value;
24 }
25
26 private static class Counter
27 {
28 private static int nextValue = 0;
29 }
30 }

该方法改造为自动自增需要增加一个静态属性nextValue 和静态类Counter。

由于我在使用自增时有多个枚举类需要用到自增功能,这个功能有复用的可能。

就想着做一个枚举类共享的工具类暂存各个枚举类的下标

这个工具类就像Oracle数据库中的序列一样,本来枚举类就像是java中的做的一个简易版的数据库中的一样,那为表做一个自增序列类就好像更有意义一点了。

 1 import java.util.HashMap;
2 import java.util.Map;
3
4 /**
5 * 枚举类型中含有自增字段时的工具接口
6 * @author zkk
7 */
8 public class IdentityEnum {
9
10 /**
11 * 根据类型为不同类型的对象保存自己的下标
12 */
13 private static final Map<Class<?>, Integer> ENUM_INDEX_MAP = new HashMap<>();
14
15
16 /**
17 * 获取某一对象的类型的自增下标
18 * @param object 对象
19 * @param identity 初始值
20 * @param step 步长
21 * @return 对象在本接口中的下标
22 */
23 public static int getIndex(Object object, int identity, int step) {
24 Class<?> objectClass = object.getClass();
25 if (!ENUM_INDEX_MAP.containsKey(objectClass)) {
26 ENUM_INDEX_MAP.put(objectClass, identity);
27 } else {
28 ENUM_INDEX_MAP.put(objectClass, ENUM_INDEX_MAP.get(objectClass) + step);
29 }
30 return ENUM_INDEX_MAP.get(objectClass);
31 }
32
33 /**
34 * 获取某一对象的类型的自增下标
35 * @param object 对象
36 * @param reSetIdentity 重设初始值
37 */
38 public static void setIndex(Object object, int reSetIdentity) {
39 Class<?> enumObjectClass = object.getClass();
40 ENUM_INDEX_MAP.put(enumObjectClass, reSetIdentity);
41 }
42 /**
43 * 获取某一对象的类型的自增下标
44 * @param object 对象
45 * @return 对象在本接口中的下标
46 */
47 public static int getIndex(Object object) {
48 return getIndex(object,0,1);
49 }
50
51 }

为了调用方便,这里我使用枚举类的类型作为序列自增类的key。

如要对同一个枚举类型的不同字段分别设定自增的话,

需要对IdentityEnum.java做一定的改造,

如有其他非常规自增,也可直接在这个类中改造。

调用时代码:

 1 import java.math.BigDecimal;
2
3 /**
4 * excel模板对应的列
5 * @author zkk
6 */
7 public enum ExcelColumn {
8 /**
9 * 职员姓名
10 */
11 EMPLOYEE_NAME(String.class),
12 /**
13 * 职员工号
14 */
15 EMPLOYEE_NO(String.class),
16 /**
17 * 税额
18 */
19 TAX_AMOUNT(5,BigDecimal.class),
20 /**
21 * 金额
22 */
23 AMOUNT(BigDecimal.class);
24
25 /**
26 * 列的序号
27 */
28 public int index;
29
30 /**
31 * 列类型对应的的java数据类型
32 */
33 public Class columnJavaType;
34
35 ExcelColumn(Class columnJavaType) {
36 //获取并自动更新序号
37 this.index = IdentityEnum.getIndex(this);
38 this.columnJavaType = columnJavaType;
39 }
40
41 ExcelColumn(int index, Class columnJavaType) {
42 this.index = index;
43 //更新序号
44 IdentityEnum.setIndex(this,3);
45 this.columnJavaType = columnJavaType;
46 }
47 }

使用这个自增工具类也可以在枚举类型中设定某个字段自增,对非自动化自增枚举类的改造时更方便

由于枚举类型获取类型的所有值的列表时是调用 values() 方法,故我称枚举类型的某行数据为value

经我观察枚举类的构造是根据类开始的第一个分号:【;】之前的各value及其后括号里的参数顺序及其类型,作为调用构造方法的依据。

所有的枚举类的属性和构造方法及其他方法都应放在第一个分号【;】之后。

第一次获取某个value时,会按代码中写的value的顺序依次执行第一个分号前的各个value的对应构造方法。

↑↑这是实现枚举类型自增的基础:按行依次执行对应的构造方法。

java 为 枚举类型euum 的 某个int(Integer)字段做自增 Identity的更多相关文章

  1. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  2. 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题

    原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...

  3. Java enum枚举类型

    java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...

  4. Java的枚举类型使用方法详解

    1.背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏 ...

  5. Java:枚举类型

    Java:枚举类型 每博一文案 师父说:人活一世,每个人都有他的特别,每个人都值得被温柔相待.红尘一遭,每段经历都有它的必然, 每段经历都造就了现在的你,最快乐的事情,就是做自己,最浪漫的事情,就是爱 ...

  6. (转+原创)java的枚举类型Enum解释

    原文:http://www.cnblogs.com/mxmbk/articles/5091999.html 下文中还添加了个人的一些补充和理解. 在Java SE5之前,我们要使用枚举类型时,通常会使 ...

  7. [转载] Java中枚举类型的使用 - enum

    目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...

  8. java中枚举类型的使用

    Java 枚举(enum) 详解7种常见的用法 JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. web项目里实体类使用枚举类型: 一般在该实体 ...

  9. java之 ------ 枚举类型

    枚举 一.枚举类型具体说明 简单的说.Enum一般用来表示一组同样类型的常量. 如性别.日期.月份.颜色等.对这些属性用常量的优点是显而易见的,不仅能够保证单例,且在比較的时候能够用"==& ...

  10. MyBatis(八):Mybatis Java API枚举类型转化的用法

    最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...

随机推荐

  1. laravel视图响应

    1.输出json $data = [ 'id' => 1, 'name' => 'jack', ]; return response()->json($data); 2.重定向 // ...

  2. 快速搭建maven私服仓库并配置

    1.第一步,通过官方网站下载tar.gz包上传到服务器并解压 随后进入解压目录,并执行./bin/nexus start 此时可能会出现如下异常 处理这个问题很容易,找到bin下的nexus文件,vi ...

  3. mac 查看本机ip

    创建 ip.sh 文件,文件内容为 ifconfig -a | grep -e "inet[^6]" |\ sed -e "s/.*inet[^6][^0-9]*\([0 ...

  4. 利用 fastjson 的 toJSONStringWithDateFormat 方法,将Date 格式化 为常见类型的时间

    利用 fastjson 的 toJSONStringWithDateFormat 方法,将Date 格式化 为常见类型的时间 JSON.toJSONStringWithDateFormat(nrcSt ...

  5. oceanbase 社区版安装

    # 一.环境准备|节点类别|主机名|IP||-|-|-||OBSERVER|observer1|192.168.3.41||OBSERVER|observer2|192.168.3.42||OBSER ...

  6. 怎么理解超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n)

    怎么理解超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n) 前言:重在记录,可能出错. 超几何分布概率公式:p=C(M,k)C(N-M,n-k)/C(N,n),也就是: 到底要怎么 ...

  7. Cupboard and Balloons CodeForces - 342C

    Cupboard and Balloons CodeForces - 342C 找到不变的点 抓住不确定的点进行讨论 #include<iostream> #include<cmat ...

  8. S-HR查询用户组织范围

    SELECT org.FNumber FNumber,org.FName_L2 orgName FROM T_PM_OrgRange orgRange LEFT JOIN T_ORG_admin or ...

  9. MySQL 常用命令(1)------连接、添加用户与授权

    一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL 进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码 ...

  10. 谈谈 Redis 的过期策略

    在日常开发中,我们使用 Redis 存储 key 时通常会设置一个过期时间,但是 Redis 是怎么删除过期的 key,而且 Redis 是单线程的,删除 key 会不会造成阻塞.要搞清楚这些,就要了 ...