Java枚举类型
原创 已于 2024-10-21 22:39:14 修改 · 粉丝可见 · 551 阅读 · 2 · 2 GEO检测 · 编辑 文章链接:https://blog.csdn.net/hacker_51/article/details/143029465
Java枚举(Enum)类型是一种特殊的类,它用于表示一组固定的常量。枚举提供了一种类型安全的方式来处理一组有限的常量值。从 Java 5 开始,枚举类型被正式引入,并且成为了 Java 语言的一部分。
枚举的基本定义 枚举类型的定义使用关键字 enum ,后面跟着枚举的名称。枚举的每个实例称为枚举常量。
刨析过程 普通类模拟相关的enum类 Java 5之前通过普通类来定义我们需要的枚举常量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public class myClassEnum { private String key; private String value; public static final myClassEnum ADMIN = new myClassEnum ("ADMIN" ,"管理员" ); public static final myClassEnum USER = new myClassEnum ("USER" ,"用户" ); myClassEnum(){} private myClassEnum (String key, String value) { this .key = key; this .value = value; } public String getKey () { return key; } public String getValue () { return value; } @Override public String toString () { return "myClassEnum{" + "key='" + key + '\'' + ", value='" + value + '\'' + '}' ; } }
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 public class test { public static void main (String[] args) { myClassEnum userClassEnum = myClassEnum.USER; System.out.println(userClassEnum); myClassEnum adminClassEnum = myClassEnum.ADMIN; System.out.println(adminClassEnum); } }
最后运行结果:
1 2 myClassEnum{key='USER' , value='用户' } myClassEnum{key='ADMIN' , value='管理员' }
我们可以通过调用这个枚举类绑定相关常量,对应常量之间关系的映射。通过get方法进行取值。
enum类的转化 通过不断发展,enum的枚举类逐渐简易化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import lombok.Getter;import lombok.NoArgsConstructor;import com.baomidou.mybatisplus.annotation.EnumValue;import com.fasterxml.jackson.annotation.JsonValue;@Getter @NoArgsConstructor public enum MyEnum { e_ADMIN("e_ADMIN" ,"超级管理员" ), e_USER("e_USER" ,"普通用户" ); @EnumValue private String key; @JsonValue private String value; MyEnum(String key, String value) { this .key = key; this .value = value; } @Override public String toString () { return "MyEnum{" + "key='" + key + '\'' + ", value='" + value + '\'' + '}' ; } }
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 public class test { public static void main (String[] args) { MyEnum userEnum = MyEnum.e_USER; System.out.println(userEnum); MyEnum adminEnum = MyEnum.e_ADMIN; System.out.println(adminEnum); } }
最后运行结果:
1 2 MyEnum{key='e_USER' , value='普通用户' } MyEnum{key='e_ADMIN' , value='超级管理员' }
其中,注意枚举的常量值只能在前面,而后声明相应的变量和方法。
枚举类,
使用 @EnumValue 注解指定枚举的数据库存储值,即将 枚举类型 存储在数据库时,会调用 getKey()方法的值进行存储。
使用 @JsonValue 注解指定枚举的 JSON 序列化值, 即将 枚举类型包装成Json格式时,会调用getValue()方法的值进行包装。
Mybatis-plus枚举的映射 练习的时候遇到了 以下报错
1 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'status' from result set. Cause: java.lang.IllegalArgumentException: No enum constant enums.StatusType.1
这是由于Mybatis 扫描不精确,导致无法成功映射相应的枚举变量
只需要在配置文件 application.yaml 中加上
1 2 mybatis -plus: type -enums-package: 你的枚举变量报名.enums
最后成功映射。