厦门怎么没有 网站备案,wordpress评论推广,网络工程的就业方向,商务网站建设模板总结#xff1a;Java枚举类Enum常用API#xff0c;与EnumUtil工具类封装 一通过enum关键字创建一个枚举类#xff1a;二自定义枚举对象常用方法示例#xff1a;1.获取枚举值方法#xff1a;一般为code字段2.获取描述值方法#xff1a;一般为description字段3.获取枚举对象… 总结Java枚举类Enum常用API与EnumUtil工具类封装 一·通过enum关键字创建一个枚举类二·自定义枚举对象常用方法示例1.获取枚举值方法一般为code字段2.获取描述值方法一般为description字段3.获取枚举对象名称4.获取枚举对象在枚举类中的索引位置从0开始计算5.获取枚举对象的序列化方法一般很少用6.获取枚举类的class对象 三·自定义枚举类自带静态方法常用示例1.获取枚举单个对象2.根据枚举对象名获取对应的枚举对象方式一3.根据枚举对象名获取对应的枚举对象方式二4.获取枚举类中全部枚举对象数组集合 四·枚举类Class对象常用方法示例这块不仅包含枚举相关的API也涉及class的反射内容方法API1.获取该类型的全类名2.判断该类是不是枚举类型3.获取枚举对象数组集合4.获取该类声明的所有属性字段 五·枚举类父类Enum常用方法示例1.根据枚举对象名获取对应的枚举对象方式三 六·EnumUtil工具类封装各种枚举类本身不具备但是开发中经常需要使用的功能方法 一·通过enum关键字创建一个枚举类
public enum UserStatus {/*** 正常*/Normal(1, 正常),Locked(2, 锁定),Delete(3, 删除),Disabled(4, 禁用),NotCertified(5, 未认证);private Integer code;private String description;UserStatus(Integer code, String description) {this.code code;this.description description;}public Integer getCode() {return code;}public String getDescription() {return description;}
}二·自定义枚举对象常用方法示例
1.获取枚举值方法一般为code字段
//获取code值4
Integer code UserStatus.Disabled.getCode();
System.out.println(code);2.获取描述值方法一般为description字段
//获取description值禁用
String description UserStatus.Disabled.getDescription();
System.out.println(description);3.获取枚举对象名称
//获取枚举对象在枚举类中的名称Disabled
String name UserStatus.Disabled.name();
System.out.println(name);4.获取枚举对象在枚举类中的索引位置从0开始计算
//获取枚举对象在枚举类中的索引位置从0开始计算即ordinal值3
int ordinal UserStatus.Disabled.ordinal();
System.out.println(ordinal);5.获取枚举对象的序列化方法一般很少用
//获取枚举类中所有的枚举对象Optional[EnumDesc[UserStatus.Disabled]]
OptionalEnum.EnumDescUserStatus userStatusEnumDesc UserStatus.Disabled.describeConstable();
System.out.println(userStatusEnumDesc);6.获取枚举类的class对象
//获取枚举类对象的class对象true
ClassUserStatus declaringClass UserStatus.Disabled.getDeclaringClass();
Class? extends UserStatus aClass UserStatus.Disabled.getClass();
System.out.println(declaringClass aClass);三·自定义枚举类自带静态方法常用示例
1.获取枚举单个对象
//获取枚举单个对象Locked
UserStatus locked UserStatus.Locked;
System.out.println(locked);2.根据枚举对象名获取对应的枚举对象方式一
//根据枚举对象名获取对应的枚举对象方式一Normal
UserStatus normal UserStatus.valueOf(Normal);
System.out.println(normal);3.根据枚举对象名获取对应的枚举对象方式二
//根据枚举对象名获取对应的枚举对象方式二Delete
UserStatus delete UserStatus.valueOf(UserStatus.class, Delete);
System.out.println(delete);4.获取枚举类中全部枚举对象数组集合
//获取所有枚举对象数组集合
UserStatus[] values UserStatus.values();
System.out.println(Arrays.toString(values));四·枚举类Class对象常用方法示例这块不仅包含枚举相关的API也涉及class的反射内容方法API
1.获取该类型的全类名
//获取该类型的全类名com.pazl.iot.admin.bean.UserStatus
String typeName UserStatus.class.getTypeName();
System.out.println(typeName);2.判断该类是不是枚举类型
//判断该类是不是枚举类型true
boolean anEnum UserStatus.class.isEnum();
System.out.println(anEnum);3.获取枚举对象数组集合
//获取枚举对象数组集合如果是非枚举类class调用则直接返回null
UserStatus[] enumConstants UserStatus.class.getEnumConstants();
for (UserStatus enumConstant : enumConstants) {//输出每个枚举对象的code和descriptionSystem.out.println(enumConstant.getCode() enumConstant.getDescription());
}4.获取该类声明的所有属性字段
//获取该类声明的所有属性字段
Field[] declaredFields UserStatus.class.getDeclaredFields();
for (Field declaredField : declaredFields) {//输出每个属性字段System.out.println(declaredField);
}五·枚举类父类Enum常用方法示例
1.根据枚举对象名获取对应的枚举对象方式三
//根据枚举对象名获取对应的枚举对象方式三
UserStatus normal_1 Enum.valueOf(UserStatus.class, Normal);
System.out.println(normal_1);六·EnumUtil工具类封装各种枚举类本身不具备但是开发中经常需要使用的功能方法
import com.alibaba.fastjson2.JSON;
import com.pazl.iot.admin.bean.UserStatus;import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;/*** 枚举工具类** author LiuMingFu* date 2024/3/9*/
public class EnumUtils {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {System.out.println(1.);/*** 1.枚举类单个对象常用方法示例*///获取code值4Integer code UserStatus.Disabled.getCode();System.out.println(code);//获取description值禁用String description UserStatus.Disabled.getDescription();System.out.println(description);//获取枚举对象在枚举类中的名称DisabledString name UserStatus.Disabled.name();System.out.println(name);//获取枚举对象在枚举类中的索引位置从0开始计算即ordinal值3int ordinal UserStatus.Disabled.ordinal();System.out.println(ordinal);//获取枚举类中所有的枚举对象Optional[EnumDesc[UserStatus.Disabled]]OptionalEnum.EnumDescUserStatus userStatusEnumDesc UserStatus.Disabled.describeConstable();System.out.println(userStatusEnumDesc);//获取枚举类对象的class对象trueClassUserStatus declaringClass UserStatus.Disabled.getDeclaringClass();Class? extends UserStatus aClass UserStatus.Disabled.getClass();System.out.println(declaringClass aClass);System.out.println(2.);/*** 2.枚举类自带静态常用方法示例*///获取枚举单个对象LockedUserStatus locked UserStatus.Locked;System.out.println(locked);//根据枚举对象名获取对应的枚举对象方式一NormalUserStatus normal UserStatus.valueOf(Normal);System.out.println(normal);//根据枚举对象名获取对应的枚举对象方式二DeleteUserStatus delete UserStatus.valueOf(UserStatus.class, Delete);System.out.println(delete);//获取所有枚举对象数组集合UserStatus[] values UserStatus.values();System.out.println(Arrays.toString(values));System.out.println(3.);/*** 3.枚举类class对象常用方法示例这块也涉及class的反射内容方法API*///获取该类型的全类名com.pazl.iot.admin.bean.UserStatusString typeName UserStatus.class.getTypeName();System.out.println(typeName);//判断该类是不是枚举类型trueboolean anEnum UserStatus.class.isEnum();System.out.println(anEnum);//获取枚举对象数组集合如果是非枚举类class调用则直接返回nullUserStatus[] enumConstants UserStatus.class.getEnumConstants();for (UserStatus enumConstant : enumConstants) {//输出每个枚举对象的code和descriptionSystem.out.println(enumConstant.getCode() enumConstant.getDescription());}//获取该类声明的所有属性字段Field[] declaredFields UserStatus.class.getDeclaredFields();for (Field declaredField : declaredFields) {//输出每个属性字段System.out.println(declaredField);}System.out.println(4.);/*** 4.所有枚举类父类Enum常用方法示例*///根据枚举对象名获取对应的枚举对象方式三UserStatus normal_1 Enum.valueOf(UserStatus.class, Normal);System.out.println(normal_1);System.out.println(5.);//根据枚举类code值获取对应的枚举类对象UserStatus enumObject getEnumObjectByCode(UserStatus.class, 3);System.out.println(enumObject.getCode());System.out.println(enumObject.getDescription());UserStatus enumObject2 getEnumObjectByDescription(UserStatus.class, 未认证);System.out.println(enumObject2.getCode());System.out.println(enumObject2.getDescription());UserStatus enumObject3 getEnumObject(UserStatus.class, description, 未认证);System.out.println(enumObject3.getCode());System.out.println(enumObject3.getDescription());UserStatus enumObject4 getEnumObject(UserStatus.class, code, 3);System.out.println(enumObject4.getCode());System.out.println(enumObject4.getDescription());MapString, String enumMapWithStringKey getEnumMapWithStringKey(UserStatus.class);//转为json打印输出需要引入外包fastjson依赖包不需要去掉就行System.out.println(JSON.toJSONString(enumMapWithStringKey));MapString, String enumMapWithStringKey2 getEnumMapWithStringKey(UserStatus.Delete);System.out.println(JSON.toJSONString(enumMapWithStringKey2));MapInteger, String enumMapWithIntegerKey getEnumMapWithIntegerKey(UserStatus.class);System.out.println(JSON.toJSONString(enumMapWithIntegerKey));MapInteger, String enumMapWithIntegerKey2 getEnumMapWithIntegerKey(UserStatus.Delete);System.out.println(JSON.toJSONString(enumMapWithIntegerKey2));}/*** 根据枚举类整型字段的指定值、class对象获取对应的枚举类对象** param enumClass 目标枚举类class对象* param integerFieldName 枚举类存在的一个整型字段名* param integerFieldValue 枚举类该整型字段的值* param T 枚举类类型* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT T getEnumObject(ClassT enumClass, String integerFieldName, Integer integerFieldValue) throws NoSuchFieldException, IllegalAccessException {//根据class对象获取枚举类中名称为 integerFieldName 的属性字段对象Field integerField enumClass.getDeclaredField(integerFieldName);//设置强制访问权限一般情况私有属性、方法不允许反射访问integerField.setAccessible(true);//获取该枚举类声明的所有枚举对象T[] enumConstants enumClass.getEnumConstants();for (T enumConstant : enumConstants) {//获取每个枚举对象的该属性值Integer value (Integer) integerField.get(enumConstant);//若根据参数值一样则将该枚举类对象直接返回if (integerFieldValue.equals(value)) {return enumConstant;}}//没有则返回nullreturn null;}/*** 根据枚举类字符串类型字段的指定值、class对象获取对应的枚举类对象** param enumClass 目标枚举类class对象* param stringFieldName 枚举类存在的一个字符串类型字段名* param stringFieldValue 枚举类该整型字符串类型的值* param T 枚举类类型* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT T getEnumObject(ClassT enumClass, String stringFieldName, String stringFieldValue) throws NoSuchFieldException, IllegalAccessException {//根据class对象获取枚举类中名称为 stringFieldName 的属性字段对象Field stringField enumClass.getDeclaredField(stringFieldName);//设置强制访问权限一般情况私有属性、方法不允许反射访问stringField.setAccessible(true);//获取该枚举类声明的所有枚举对象T[] enumConstants enumClass.getEnumConstants();for (T enumConstant : enumConstants) {//获取每个枚举对象的该属性值String value (String) stringField.get(enumConstant);//若根据参数值一样则将该枚举类对象直接返回if (stringFieldValue.equals(value)) {return enumConstant;}}//没有则返回nullreturn null;}/*** 根据枚举对象的描述、class对象获取对应的枚举类对象* 注意需要该枚举类存在 description 字段才行** param enumClass 目标枚举类class对象* param description 枚举对象的描述* param T 枚举类类型* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT T getEnumObjectByDescription(ClassT enumClass, String description) throws NoSuchFieldException, IllegalAccessException {//根据class对象获取枚举类中名称为 description 的属性字段Field descField enumClass.getDeclaredField(description);//设置强制访问权限一般情况私有属性、方法不允许反射访问descField.setAccessible(true);//获取该枚举类声明的所有枚举对象T[] enumConstants enumClass.getEnumConstants();for (T enumConstant : enumConstants) {//获取每个枚举对象的该属性值String descValue (String) descField.get(enumConstant);//若根据参数值一样则将该枚举类对象直接返回if (description.equals(descValue)) {return enumConstant;}}//没有则返回nullreturn null;}/*** 根据枚举值、class对象获取对应的枚举类对象* 注意需要该枚举类存在 code 字段才行** param enumClass 目标枚举类class对象* param code 枚举值* param T 枚举类类型* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT T getEnumObjectByCode(ClassT enumClass, Integer code) throws NoSuchFieldException, IllegalAccessException {//根据class对象获取枚举类中名称为code的属性字段Field codeField enumClass.getDeclaredField(code);//设置强制访问权限一般情况私有属性、方法不允许反射访问codeField.setAccessible(true);//获取该枚举类声明的所有枚举对象T[] enumConstants enumClass.getEnumConstants();for (T enumConstant : enumConstants) {//获取每个枚举对象的code属性值Integer codeValue (Integer) codeField.get(enumConstant);//若根据参数值一样则将该枚举类对象直接返回if (code.equals(codeValue)) {return enumConstant;}}//没有则返回nullreturn null;}/*** 根据一个枚举类对象获取他的枚举值* 注意该枚举类必须存在 code 字段且为整型** param enumObject 一个枚举类对象* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT Integer getCode(T enumObject) throws IllegalAccessException, NoSuchFieldException {Field codeField enumObject.getClass().getDeclaredField(code);codeField.setAccessible(true);return (Integer) codeField.get(enumObject);}/*** 根据一个枚举类对象获取他的枚举值* 注意该枚举类必须存在 codeFieldName 字段且为整型** param enumObject 一个枚举类对象* param codeFieldName 枚举值字段名* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT Integer getCode(T enumObject, String codeFieldName) throws IllegalAccessException, NoSuchFieldException {Field codeField enumObject.getClass().getDeclaredField(codeFieldName);codeField.setAccessible(true);return (Integer) codeField.get(enumObject);}/*** 根据一个枚举类对象获取他的描述字符串* 注意该枚举类必须存在 description 字段且为字符串类型** param enumObject 一个枚举类对象* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT String getDescription(T enumObject) throws IllegalAccessException, NoSuchFieldException {Field descriptionField enumObject.getClass().getDeclaredField(description);descriptionField.setAccessible(true);return (String) descriptionField.get(enumObject);}/*** 根据一个枚举类对象获取他的描述字符串* 注意该枚举类必须存在 descFieldName 字段且为字符串类型** param enumObject 一个枚举类对象* param descFieldName 枚举对象描述字段名* return* author LiuMingFu* date 2024/3/9*/public static T extends EnumT String getDescription(T enumObject, String descFieldName) throws IllegalAccessException, NoSuchFieldException {Field descriptionField enumObject.getClass().getDeclaredField(descFieldName);descriptionField.setAccessible(true);return (String) descriptionField.get(enumObject);}/*** 获取枚举类中每个枚举值对应的map集合* key枚举对象code值* value枚举对象description值** param enumClass 枚举类class对象* param T 枚举类类型* return* author LiuMingFu* date 2024/2/28*/public static T extends EnumT MapInteger, String getEnumMapWithIntegerKey(ClassT enumClass) throws NoSuchFieldException, IllegalAccessException {MapInteger, String enumMap new LinkedHashMap();//获取所有枚举类属性字段Field[] fields enumClass.getDeclaredFields();//循环处理各个枚举类型字段for (Field field : fields) {//判断是否为枚举属性字段if (field.isEnumConstant()) {//根据枚举类class对象、枚举字段名获取对应的枚举类对象T enumValue Enum.valueOf(enumClass, field.getName());//获取枚举对象code值Integer code getCode(enumValue);//获取枚举对象描述String description getDescription(enumValue);//放入map集合enumMap.put(code, description);}}return enumMap;}/*** 获取枚举类中每个枚举值对应的map集合* key枚举对象code值* value枚举对象description值** param enumObject 一个枚举类对象* param T 枚举类类型* return* author LiuMingFu* date 2024/2/28*/public static T extends EnumT MapInteger, String getEnumMapWithIntegerKey(T enumObject) throws NoSuchFieldException, IllegalAccessException {MapInteger, String enumMap new LinkedHashMap();//获取所有枚举类属性字段Field[] fields enumObject.getClass().getDeclaredFields();//循环处理各个枚举类型字段for (Field field : fields) {//判断是否为枚举属性字段if (field.isEnumConstant()) {//根据枚举类class对象、枚举字段名获取对应的枚举类对象T enumValue Enum.valueOf(enumObject.getDeclaringClass(), field.getName());//获取枚举对象code值Integer code getCode(enumValue);//获取枚举对象描述String description getDescription(enumValue);//放入map集合enumMap.put(code, description);}}return enumMap;}/*** 获取枚举类中每个枚举值对应的map集合* key枚举对象code值* value枚举对象description值** param enumClass 枚举类class对象* param T 枚举类类型* return* author LiuMingFu* date 2024/2/28*/public static T extends EnumT MapString, String getEnumMapWithStringKey(ClassT enumClass) throws NoSuchFieldException, IllegalAccessException {MapString, String enumMap new LinkedHashMap();//获取所有枚举类属性字段Field[] fields enumClass.getDeclaredFields();//循环处理各个枚举类型字段for (Field field : fields) {//判断是否为枚举属性字段if (field.isEnumConstant()) {//根据枚举类class对象、枚举字段名获取对应的枚举类对象T enumValue Enum.valueOf(enumClass, field.getName());//获取枚举对象code值Integer code getCode(enumValue);//获取枚举对象描述String description getDescription(enumValue);//放入map集合enumMap.put(code.toString(), description);}}return enumMap;}/*** 获取枚举类中每个枚举值对应的map集合* key枚举对象code值* value枚举对象description值** param enumObject 一个枚举类对象* param T 枚举类类型* return* author LiuMingFu* date 2024/2/28*/public static T extends EnumT MapString, String getEnumMapWithStringKey(T enumObject) throws NoSuchFieldException, IllegalAccessException {MapString, String enumMap new LinkedHashMap();//获取所有枚举类属性字段Field[] fields enumObject.getClass().getDeclaredFields();//循环处理各个枚举类型字段for (Field field : fields) {//判断是否为枚举属性字段if (field.isEnumConstant()) {//根据枚举类class对象、枚举字段名获取对应的枚举类对象T enumValue Enum.valueOf(enumObject.getDeclaringClass(), field.getName());//获取枚举对象code值Integer code getCode(enumValue);//获取枚举对象描述String description getDescription(enumValue);//放入map集合enumMap.put(code.toString(), description);}}return enumMap;}}