总结:Java枚举类Enum常用API,与EnumUtil工具类封装 一·通过enum关键字创建一个枚举类: 二·自定义枚举对象常用方法示例: 1.获取枚举值方法:一般为code字段 2.获取描述值方法:一般为description字段 3.获取枚举对象名称: 4.获取枚举对象在枚举类中的索引位置:从0开始计算 5.获取枚举对象的序列化方法:一般很少用 6.获取枚举类的class对象: 三·自定义枚举类,自带静态方法常用示例: 1.获取枚举单个对象: 2.根据枚举对象名,获取对应的枚举对象,方式一: 3.根据枚举对象名,获取对应的枚举对象,方式二: 4.获取枚举类中全部枚举对象数组集合: 四·枚举类Class对象常用方法示例:这块不仅包含枚举相关的API,也涉及class的反射内容方法API 1.获取该类型的全类名: 2.判断该类是不是枚举类型: 3.获取枚举对象数组集合: 4.获取该类声明的所有属性字段: 五·枚举类父类,Enum常用方法示例: 六·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字段
Integer code = UserStatus. Disabled . getCode ( ) ;
System . out. println ( code) ;
2.获取描述值方法:一般为description字段
String description = UserStatus. Disabled . getDescription ( ) ;
System . out. println ( description) ;
3.获取枚举对象名称:
String name = UserStatus. Disabled . name ( ) ;
System . out. println ( name) ;
4.获取枚举对象在枚举类中的索引位置:从0开始计算
int ordinal = UserStatus. Disabled . ordinal ( ) ;
System . out. println ( ordinal) ;
5.获取枚举对象的序列化方法:一般很少用
Optional < Enum. EnumDesc < UserStatus > > userStatusEnumDesc = UserStatus. Disabled . describeConstable ( ) ;
System . out. println ( userStatusEnumDesc) ;
6.获取枚举类的class对象:
Class < UserStatus > declaringClass = UserStatus. Disabled . getDeclaringClass ( ) ;
Class < ? extends UserStatus > aClass = UserStatus. Disabled . getClass ( ) ;
System . out. println ( declaringClass == aClass) ;
三·自定义枚举类,自带静态方法常用示例:
1.获取枚举单个对象:
UserStatus locked = UserStatus. Locked ;
System . out. println ( locked) ;
2.根据枚举对象名,获取对应的枚举对象,方式一:
UserStatus normal = UserStatus . valueOf ( "Normal" ) ;
System . out. println ( normal) ;
3.根据枚举对象名,获取对应的枚举对象,方式二:
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.获取该类型的全类名:
String typeName = UserStatus . class . getTypeName ( ) ;
System . out. println ( typeName) ;
2.判断该类是不是枚举类型:
boolean anEnum = UserStatus . class . isEnum ( ) ;
System . out. println ( anEnum) ;
3.获取枚举对象数组集合:
UserStatus [ ] enumConstants = UserStatus . class . getEnumConstants ( ) ;
for ( UserStatus enumConstant : enumConstants) { System . 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 ;
public class EnumUtils { public static void main ( String [ ] args) throws NoSuchFieldException , IllegalAccessException { System . out. println ( "1.======================================================================================================" ) ; Integer code = UserStatus. Disabled . getCode ( ) ; System . out. println ( code) ; String description = UserStatus. Disabled . getDescription ( ) ; System . out. println ( description) ; String name = UserStatus. Disabled . name ( ) ; System . out. println ( name) ; int ordinal = UserStatus. Disabled . ordinal ( ) ; System . out. println ( ordinal) ; Optional < Enum. EnumDesc < UserStatus > > userStatusEnumDesc = UserStatus. Disabled . describeConstable ( ) ; System . out. println ( userStatusEnumDesc) ; Class < UserStatus > declaringClass = UserStatus. Disabled . getDeclaringClass ( ) ; Class < ? extends UserStatus > aClass = UserStatus. Disabled . getClass ( ) ; System . out. println ( declaringClass == aClass) ; System . out. println ( "2.======================================================================================================" ) ; UserStatus locked = UserStatus. Locked ; System . out. println ( locked) ; UserStatus normal = UserStatus . valueOf ( "Normal" ) ; System . out. println ( normal) ; UserStatus delete = UserStatus . valueOf ( UserStatus . class , "Delete" ) ; System . out. println ( delete) ; UserStatus [ ] values = UserStatus . values ( ) ; System . out. println ( Arrays . toString ( values) ) ; System . out. println ( "3.======================================================================================================" ) ; String typeName = UserStatus . class . getTypeName ( ) ; System . out. println ( typeName) ; boolean anEnum = UserStatus . class . isEnum ( ) ; System . out. println ( anEnum) ; UserStatus [ ] enumConstants = UserStatus . class . getEnumConstants ( ) ; for ( UserStatus enumConstant : enumConstants) { System . out. println ( enumConstant. getCode ( ) + ":" + enumConstant. getDescription ( ) ) ; } Field [ ] declaredFields = UserStatus . class . getDeclaredFields ( ) ; for ( Field declaredField : declaredFields) { System . out. println ( declaredField) ; } System . out. println ( "4.======================================================================================================" ) ; UserStatus normal_1 = Enum . valueOf ( UserStatus . class , "Normal" ) ; System . out. println ( normal_1) ; System . out. println ( "5.======================================================================================================" ) ; 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 ( ) ) ; Map < String , String > enumMapWithStringKey = getEnumMapWithStringKey ( UserStatus . class ) ; System . out. println ( JSON . toJSONString ( enumMapWithStringKey) ) ; Map < String , String > enumMapWithStringKey2 = getEnumMapWithStringKey ( UserStatus. Delete ) ; System . out. println ( JSON . toJSONString ( enumMapWithStringKey2) ) ; Map < Integer , String > enumMapWithIntegerKey = getEnumMapWithIntegerKey ( UserStatus . class ) ; System . out. println ( JSON . toJSONString ( enumMapWithIntegerKey) ) ; Map < Integer , String > enumMapWithIntegerKey2 = getEnumMapWithIntegerKey ( UserStatus. Delete ) ; System . out. println ( JSON . toJSONString ( enumMapWithIntegerKey2) ) ; } public static < T extends Enum < T > > T getEnumObject ( Class < T > enumClass, String integerFieldName, Integer integerFieldValue) throws NoSuchFieldException , IllegalAccessException { 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; } } return null ; } public static < T extends Enum < T > > T getEnumObject ( Class < T > enumClass, String stringFieldName, String stringFieldValue) throws NoSuchFieldException , IllegalAccessException { 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; } } return null ; } public static < T extends Enum < T > > T getEnumObjectByDescription ( Class < T > enumClass, String description) throws NoSuchFieldException , IllegalAccessException { 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; } } return null ; } public static < T extends Enum < T > > T getEnumObjectByCode ( Class < T > enumClass, Integer code) throws NoSuchFieldException , IllegalAccessException { Field codeField = enumClass. getDeclaredField ( "code" ) ; codeField. setAccessible ( true ) ; T [ ] enumConstants = enumClass. getEnumConstants ( ) ; for ( T enumConstant : enumConstants) { Integer codeValue = ( Integer ) codeField. get ( enumConstant) ; if ( code. equals ( codeValue) ) { return enumConstant; } } return null ; } public static < T extends Enum < T > > Integer getCode ( T enumObject) throws IllegalAccessException , NoSuchFieldException { Field codeField = enumObject. getClass ( ) . getDeclaredField ( "code" ) ; codeField. setAccessible ( true ) ; return ( Integer ) codeField. get ( enumObject) ; } public static < T extends Enum < T > > Integer getCode ( T enumObject, String codeFieldName) throws IllegalAccessException , NoSuchFieldException { Field codeField = enumObject. getClass ( ) . getDeclaredField ( codeFieldName) ; codeField. setAccessible ( true ) ; return ( Integer ) codeField. get ( enumObject) ; } public static < T extends Enum < T > > String getDescription ( T enumObject) throws IllegalAccessException , NoSuchFieldException { Field descriptionField = enumObject. getClass ( ) . getDeclaredField ( "description" ) ; descriptionField. setAccessible ( true ) ; return ( String ) descriptionField. get ( enumObject) ; } public static < T extends Enum < T > > String getDescription ( T enumObject, String descFieldName) throws IllegalAccessException , NoSuchFieldException { Field descriptionField = enumObject. getClass ( ) . getDeclaredField ( descFieldName) ; descriptionField. setAccessible ( true ) ; return ( String ) descriptionField. get ( enumObject) ; } public static < T extends Enum < T > > Map < Integer , String > getEnumMapWithIntegerKey ( Class < T > enumClass) throws NoSuchFieldException , IllegalAccessException { Map < Integer , String > enumMap = new LinkedHashMap < > ( ) ; Field [ ] fields = enumClass. getDeclaredFields ( ) ; for ( Field field : fields) { if ( field. isEnumConstant ( ) ) { T enumValue = Enum . valueOf ( enumClass, field. getName ( ) ) ; Integer code = getCode ( enumValue) ; String description = getDescription ( enumValue) ; enumMap. put ( code, description) ; } } return enumMap; } public static < T extends Enum < T > > Map < Integer , String > getEnumMapWithIntegerKey ( T enumObject) throws NoSuchFieldException , IllegalAccessException { Map < Integer , String > enumMap = new LinkedHashMap < > ( ) ; Field [ ] fields = enumObject. getClass ( ) . getDeclaredFields ( ) ; for ( Field field : fields) { if ( field. isEnumConstant ( ) ) { T enumValue = Enum . valueOf ( enumObject. getDeclaringClass ( ) , field. getName ( ) ) ; Integer code = getCode ( enumValue) ; String description = getDescription ( enumValue) ; enumMap. put ( code, description) ; } } return enumMap; } public static < T extends Enum < T > > Map < String , String > getEnumMapWithStringKey ( Class < T > enumClass) throws NoSuchFieldException , IllegalAccessException { Map < String , String > enumMap = new LinkedHashMap < > ( ) ; Field [ ] fields = enumClass. getDeclaredFields ( ) ; for ( Field field : fields) { if ( field. isEnumConstant ( ) ) { T enumValue = Enum . valueOf ( enumClass, field. getName ( ) ) ; Integer code = getCode ( enumValue) ; String description = getDescription ( enumValue) ; enumMap. put ( code. toString ( ) , description) ; } } return enumMap; } public static < T extends Enum < T > > Map < String , String > getEnumMapWithStringKey ( T enumObject) throws NoSuchFieldException , IllegalAccessException { Map < String , String > enumMap = new LinkedHashMap < > ( ) ; Field [ ] fields = enumObject. getClass ( ) . getDeclaredFields ( ) ; for ( Field field : fields) { if ( field. isEnumConstant ( ) ) { T enumValue = Enum . valueOf ( enumObject. getDeclaringClass ( ) , field. getName ( ) ) ; Integer code = getCode ( enumValue) ; String description = getDescription ( enumValue) ; enumMap. put ( code. toString ( ) , description) ; } } return enumMap; } }