java枚举取值没有取到对应的name_javaEnum枚举帮助类,
根据值或者名称获取枚举。。。
讲真,java的枚举类提供的⽅法太少了,Enum只有两个valueOf可以搞,如果碰上需要传⼊枚举类型的值,获取枚举类对象或者枚举类型名称的时候,只能⼲瞪眼,或者循环⽐对。最近项⽬就遇到这种,⽽且感觉以后以及别⼈都不会少遇到,所以就写了个帮助类,希望以后能⽤上吧。这个帮助类是基于以下枚举类的类型提供的:
public enum DeleteStatusEnum {
/**
* 值为0(就是NOT_DELETE)是数据库默认值,未删除;
* 值为1(就是HAS_DELETE)是已经被逻辑删除了
*/
NOT_DELETE("未删除","0"),
HAS_DELETE("已删除","1");
private String typeName;
private String typeCode;
private DeleteStatusEnum(String typeName,String typeCode){
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
}
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
}
}
帮助类的内容:
package com.hikvision.util;
import flect.InvocationTargetException;
import flect.Method;
/**
* 此帮助类严格限定为有typeName和typeCode的枚举类,如定义枚举类型为 ADMIN(typeName,typeCode)这种*
* ClassName: EnumOperatorUtil.java
* Copyright xiehao
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON.
* Date: 2017年2⽉28⽇
* @author xiehao
* @version V1.0
* @since JDK 1.8
* @see
*/
public class EnumHelperUtil{
/**
* indexOf,传⼊的参数ordinal指的是需要的枚举值在设定的枚举类中的顺序,以0开始
* T
* @param clazz
* @param ordinal
* @return
* @author xiehao
*/
public static > T indexOf(Class clazz, int ordinal){
return (T) EnumConstants()[ordinal];
}
/**
* nameOf,传⼊的参数name指的是枚举值的名称,⼀般是⼤写加下划线的
* T
* @param clazz
* @param name
* @return Enum T
* @author xiehao
*/
public static > T nameOf(Class clazz, String name){
return (T) Enum.valueOf(clazz, name);
}
/**
* 使⽤枚举类型对应的typeCode获取枚举类型
* T
* @param clazz 枚举类的class
* @param getTypeCodeMethodName 传⼊的typeCode的get⽅法
* @param typeCode 传⼊的typeCode值,这个⽅法为String类型
* @return
* @author xiehao
*/
public static > T getByStringTypeCode(Class clazz,String getTypeCodeMethodName, String typeCode){ T result = null;
try{
T[] arr = EnumConstants();
Method targetMethod = DeclaredMethod(getTypeCodeMethodName);
String typeCodeVal = null;
for(T entity:arr){
typeCodeVal = targetMethod.invoke(entity).toString();
tEquals(typeCode)){
result = entity;
break;
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
return result;
}
/**
* 使⽤枚举类型对应的typeCode获取枚举类型
* T
* @param clazz 枚举类的class
* @param getTypeCodeMethodName 传⼊的typeCode的get⽅法
* @param typeCode 传⼊的typeCode值,这个⽅法为Integer类型
java valueof
* @return
* @author xiehao
*/
public static > T getByIntegerTypeCode(Class clazz,String getTypeCodeMethodName, Integer typeCode){ T result = null;
try{
T[] arr = EnumConstants();
Method targetMethod = DeclaredMethod(getTypeCodeMethodName);
Integer typeCodeVal = null;
for(T entity:arr){
typeCodeVal = Integer.valueOf(targetMethod.invoke(entity).toString());
if(typeCodeVal.equals(typeCode)){
result = entity;
break;
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
return result;
}
/**
* 使⽤枚举类型对应的typeName获取枚举类型
* T
* @param clazz 枚举类的class
* @param getTypeNameMethodName 传⼊的typeName的get⽅法
* @param typeName 传⼊的typeName值,这个⽅法为String类型
* @return
* @author xiehao
*/
public static > T getByStringTypeName(Class clazz,String getTypeNameMethodName, String typeName){ T result = null;
try{
T[] arr = EnumConstants();
Method targetMethod = DeclaredMethod(getTypeNameMethodName);
String typeNameVal = null;
for(T entity:arr){
typeNameVal = targetMethod.invoke(entity).toString();
tEquals(typeName)){
result = entity;
break;
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。