package boot.Operation.enums;
/**
-
@author kkagr:
-
@date:2018年8月6日 下午7:42:55
-
类说明
/
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/* -
此帮助类严格限定为有typeName和typeCode的枚举类,如定义枚举类型为 ADMIN(typeName,typeCode)这种
-
ClassName: EnumOperatorUtil.java
-
Function: TODO ADD FUNCTION.
-
Reason: TODO ADD REASON.
-
@see
/
public class EnumHelperUtil{
/*-
indexOf,传入的参数ordinal指的是需要的枚举值在设定的枚举类中的顺序,以0开始
-
T
-
@param clazz
-
@param ordinal
-
@return
/
public static <T extends Enum> T indexOf(Class clazz, int ordinal){
return (T) clazz.getEnumConstants()[ordinal];
}
/* -
nameOf,传入的参数name指的是枚举值的名称,一般是大写加下划线的
-
T
-
@param clazz
-
@param name
-
@return Enum T
*/
public static <T extends Enum> 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
*/
public static <T extends Enum> T getByStringTypeCode(Class clazz,String getTypeCodeMethodName, String typeCode){
T result = null;
try{
T[] arr = clazz.getEnumConstants();
Method targetMethod = clazz.getDeclaredMethod(getTypeCodeMethodName);
String typeCodeVal = null;
for(T entity:arr){
typeCodeVal = targetMethod.invoke(entity).toString();
if(typeCodeVal.contentEquals(typeCode)){
result = entity;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
- 使用枚举类型对应的typeCode获取枚举类型
- T
- @param clazz 枚举类的class
- @param getTypeCodeMethodName 传入的typeCode的get方法
- @param typeCode 传入的typeCode值,这个方法为Integer类型
- @return
/
public static <T extends Enum> T getByIntegerTypeCode(Class clazz,String getTypeCodeMethodName, Integer typeCode){
T result = null;
try{
T[] arr = clazz.getEnumConstants();
Method targetMethod = clazz.getDeclaredMethod(getTypeCodeMethodName);
Integer typeCodeVal = null;
for(T entity:arr){
typeCodeVal = Integer.valueOf(targetMethod.invoke(entity).toString());
if(typeCodeVal.equals(typeCode)){
result = entity;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/* - 使用枚举类型对应的typeName获取枚举类型
- T
- @param clazz 枚举类的class
- @param getTypeNameMethodName 传入的typeName的get方法
- @param typeName 传入的typeName值,这个方法为String类型
- @return
*/
public static <T extends Enum> T getByStringTypeName(Class clazz,String getTypeNameMethodName, String typeName){
T result = null;
try{
T[] arr = clazz.getEnumConstants();
Method targetMethod = clazz.getDeclaredMethod(getTypeNameMethodName);
String typeNameVal = null;
for(T entity:arr){
typeNameVal = targetMethod.invoke(entity).toString();
if(typeNameVal.contentEquals(typeName)){
result = entity;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static <T extends Enum> List enumList(Class clazz,String getTypeNameMethodName, String getDescNameMethodName){
List enumList = new ArrayList<EnumHelperUtil.EnumVo>();
try{
T[] arr=clazz.getEnumConstants();
Method typeTargetMethod = clazz.getDeclaredMethod(getTypeNameMethodName);
Method descTargetMethod = clazz.getDeclaredMethod(getDescNameMethodName);
for(T entity:arr){
String typeNameVal = typeTargetMethod.invoke(entity).toString();
String descNameVal = descTargetMethod.invoke(entity).toString();
EnumVo enumVo = new EnumHelperUtil().new EnumVo();
enumVo.setValue(typeNameVal);
enumVo.setName(descNameVal);
enumList.add(enumVo);
}
} catch (Exception e) {
e.printStackTrace();
}
return enumList;
}
class EnumVo{
public String value;
public String name;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
-
}