通常我们定义的枚举类都会有两个字段:code、label,然后我们有会需要两个方法:
1.根据code获得枚举实例对象:getByCode
2.根据code获得对应的label:getLabelByCode
当然可以在每个枚举类中实现这两个方法,但是会发现这两个方法逻辑完全一致,但是又必须每次都写,代码不够简洁,有重复造轮子的嫌疑。
下面给出一种实现方式,解决重复造轮子的问题。
1.创建公共接口
public interface EnumInterface {String getCode();String getLabel();}
2.创建枚举类并实现接口
public enum PlanTypeEnum implements EnumInterface {WEEK_PLAN {@Overridepublic String getCode() {return "week_plan";}@Overridepublic String getLabel() {return "周计划";}},DAY_PLAN {@Overridepublic String getCode() {return "day_plan";}@Overridepublic String getLabel() {return "日计划";}},TEMP_PLAN {@Overridepublic String getCode() {return "temp_plan";}@Overridepublic String getLabel() {return "临时计划";}}
}
3.创建工具类
public class CodeEnumUtil {private CodeEnumUtil() {}/*** 根据code获取枚举* @param clazz 枚举类* @param code code* @return 枚举*/public static EnumInterface getByCode(Class<? extends Enum<?>> clazz, String code) {final Enum<?>[] enums = clazz.getEnumConstants();for (Enum<?> e : enums) {if (e instanceof EnumInterface) {EnumInterface enumInterface = (EnumInterface) e;if (enumInterface.getCode().equalsIgnoreCase(code)) {return enumInterface;}}}return null;}/*** 没有找到时,返回code** @param code code* @return label*/public static String getLabelByCode(Class<? extends Enum<?>> clazz, String code) {EnumInterface enumInterface = getByCode(clazz, code);if (enumInterface == null) {return code;}return enumInterface.getLabel();}
}
4.使用
CodeEnumUtil.getLabelByCode(PlanTypeEnum.class,"week_plan")