前人所做的 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. liunx查看端口使用情况

    netstat -ntlp //查看当前所有tcp端口

  2. 如何把高德地图搜索商家电话资料导出成excel里?

    有很多人问我地图商家结果采集怎么做? 怎么样能够快速的把高德地图左边的搜索列表里的商家地图,电话,导出到EXCEL里. 如何快速地将高德地图里的商家电话资料导出EXCEL? 操作步骤: 1. 选择你要 ...

  3. 解决从PLSQL导出到CSV文件的时候提示 is not a valid date and time的问题

    操作下面步骤的时候,报出[XXXXXis not a valid date and time]的错误 问题原因:以前嫌弃任务栏右下角的时间显示格式不好,手动手改了一下,导致Oracle的日期格式与现在 ...

  4. 样本方差S²中为什么是乘以1/(n-1)或者说除以n-1?贝塞尔校正,无偏估计

    样本方差S²中为什么是乘以1/(n-1)或者说除以n-1?贝塞尔校正,无偏估计 前言:重在记录,可能出错. 先看样本方差的公式如下: S2=1n-1∑i=1n(Xi-X¯)2=1n-1(∑i=1nXi ...

  5. 在centons7系统部署一套单master的k8s集群

    架构图: 操作系统:CentOS Linux release 7.7.1908 (Core) docker:docker-ce-20.10.14-3.el7.x86_64 kubernetes: 1. ...

  6. MongoDB 用户及权限增删

    本文主要是MongoDB4.X的操作 一.MongoDB用户创建   MongoDB采用基于角色的访问控制(RBAC)来确定用户的访问. 授予用户一个或多个角色,确定用户对MongoDB资源的访问权限 ...

  7. 【2020NIO.AC省选模拟#10】C. 寄蒜几盒

    题目链接 原题解: 可以发现,假设我们把凸多边形看做障碍,一个点没有被染色当且仅当在它的位置上能看到凸多边形任意两条相对的边中的一条(也就是能看到至少$\dfrac{n}{2}$条边). 对于每个询问 ...

  8. 比较有趣的C语言小程序

    1.判断是否是闰年: #include <stdio.h> int main(void) {     int year, a;     printf("Please enter  ...

  9. 【pytest】pytest.mark.dependency用例依赖标签,并解决依赖失效的问题

    pytest第三方插件,用来解决用例之间的依赖关系.如果依赖的用例执行失败后 后续的用例会被跳过执行,相当于智能执行了pytest.mark.skip, 首先要安装插件:pip install pyt ...

  10. 微信小程序主包和分包的资源可以相互引用吗

    了解主包.分包 整个小程序所有分包大小不超过20M;单个分包/主包大小不能超过 2M 主包: a. 放置默认启动页面&&tabBar页面, 以及一些分包需要用到的公共资源(如wxss. ...