packagecom.gomepay.gb.utils.enums;importcom.gomepay.gb.utils.ExceptionUtils;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.math.BigDecimal;importjava.util.Objects;/***@authorwww.gomepay.com
* @date 2020/1/19*/
public classEnumUtils {/*** 值映射为枚举
*
*@paramenumClass 枚举类
*@paramvalue 枚举值
*@parammethod 取值方法
*@param 对应枚举
*@return
*/
public static > E valueOf(ClassenumClass, Object value, Method method) {
E[] es=enumClass.getEnumConstants();for(E e : es) {
Object evalue;try{
method.setAccessible(true);
evalue=method.invoke(e);
}catch (IllegalAccessException |InvocationTargetException e1) {throw ExceptionUtils.mpe("Error: NoSuchMethod in {}. Cause:", e, enumClass.getName());
}if (value instanceof Number && evalue instanceofNumber&& new BigDecimal(String.valueOf(value)).compareTo(new BigDecimal(String.valueOf(evalue))) == 0) {returne;
}if(Objects.equals(evalue, value)) {returne;
}
}return null;
}/*** 根据value值获取enum对象
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > E getEnumByValue(final ClassenumClass,Object value) {try{return valueOf(enumClass,value,enumClass.getMethod("getValue"));
}catch(NoSuchMethodException e) {
e.printStackTrace();
}return null;
}/*** 根据value值获取text
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > String getTextByValue(final ClassenumClass,Object value) {
E e=getEnumByValue(enumClass,value);
Object evalue;
Method method= null;try{
method= enumClass.getMethod("getText");
method.setAccessible(true);
evalue=method.invoke(e);
}catch (NoSuchMethodException |IllegalAccessException |InvocationTargetException e1) {throw ExceptionUtils.mpe("Error: NoSuchMethod in {}. Cause:", e, enumClass.getName());
}if (evalue != null) {returnString.valueOf(evalue);
}return null;
}/*** 根据code值获取enum对象,如果code值相同,则获取第一个enum对象
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > E getEnumByCode(final ClassenumClass,Object value) {try{return valueOf(enumClass,value,enumClass.getMethod("getCode"));
}catch(NoSuchMethodException e) {
e.printStackTrace();
}return null;
}/*** 根据code值获取text,如果code值相同,则获取第一个enum对象的text
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > String getTextByCode(final ClassenumClass,Object value) {
E e=getEnumByCode(enumClass,value);
Object evalue;
Method method= null;try{
method= enumClass.getMethod("getText");
method.setAccessible(true);
evalue=method.invoke(e);
}catch (NoSuchMethodException |IllegalAccessException |InvocationTargetException e1) {throw ExceptionUtils.mpe("Error: NoSuchMethod in {}. Cause:", e, enumClass.getName());
}if (evalue != null) {returnString.valueOf(evalue);
}return null;
}/*** 根据code值获取enum对象
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > E getEnumBySubCode(final ClassenumClass,Object value) {try{return valueOf(enumClass,value,enumClass.getMethod("getSubCode"));
}catch(NoSuchMethodException e) {
e.printStackTrace();
}return null;
}/*** 根据code值获取text,如果code值相同,则获取第一个enum对象的text
*@paramenumClass
*@paramvalue
*@param
*@return
*/
public static > String getSubTextBySubCode(final ClassenumClass,Object value) {
E e=getEnumBySubCode(enumClass,value);
Object evalue;
Method method= null;try{
method= enumClass.getMethod("getSubText");
method.setAccessible(true);
evalue=method.invoke(e);
}catch (NoSuchMethodException |IllegalAccessException |InvocationTargetException e1) {throw ExceptionUtils.mpe("Error: NoSuchMethod in {}. Cause:", e, enumClass.getName());
}if (evalue != null) {returnString.valueOf(evalue);
}return null;
}
}