import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.Serializable;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public final class EnumHelper implements Serializable { private static final long serialVersionUID = 5L; private static final String GET_CODE_METHOD = "getCode"; private static final String GET_LABEL_METHOD = "getText"; private static final Logger LOGGER = LoggerFactory.getLogger(EnumHelper.class); private EnumHelper() { } public static > List inspectConstants(final Class clazz) { return new ArrayList (Arrays.asList(clazz.getEnumConstants())); } public static > List inspectConstants( final Class clazz, boolean containsNull) { List list = new ArrayList (Arrays.asList(clazz.getEnumConstants())); if (!containsNull) { list.remove(0); } return list; } public static > T translate(final Class clazz,final String code) { if (code == null) { return null; } try { final Method m = clazz.getDeclaredMethod(GET_CODE_METHOD); for (T t : inspectConstants(clazz)) { if (code.equals(m.invoke(t))) { return t; } } } catch (Exception e) { // NOSONAR LOGGER.error("failed to translate code {} into object of type {}", code, clazz); } return null; } public static > String getCode(final T obj) { if (obj == null) { return null; } try { Class clazz = obj.getClass(); final Method m = clazz.getDeclaredMethod(GET_CODE_METHOD); return m.invoke(obj).toString(); } catch (Exception e) { // NOSONAR // ignore } return null; } public static > T translateByLabel(final Class clazz,final String label) { if (label == null) { return null; } try { final Method m = clazz.getDeclaredMethod(GET_LABEL_METHOD); for (T t : inspectConstants(clazz)) { if (label.equals(m.invoke(t))) { return t; } } } catch (Exception e) { // NOSONAR // ignore LOGGER.error("failed to translate label {} into object of type {}",label, clazz); } return null; }}复制代码