一些常量,如果以硬编码的方式写在代码里,到后续不方便维护。如果把项目转接给其他同事,这些魔法值更容易产生歧义并产生不必要的bug,如下代码所示:
bash
public String method1(String dictVal) {
if ("1".equals(dictVal)) {
return "1";
}
return "0";
}
时间久后,在没有注释或注释不完整的情况下,可能开发人员自己都不知道这些魔法值代表什么意思,还得花时间研究。因此,开发人员应将一些字典值,放在常量类,枚举类中存放。
本文主要介绍以枚举类的形式存放字典值。
案例一:存放字典类型和字典值
bash
public enum TaskResultEnums {
SUCCESS("ok", "3"),
RUNNING("waiting", "2"),
FAILED("error", "1");
TaskResultEnums(String label, String value) {
this.label = label;
this.value = value;
}
private final String label;
private final String value;
public String getLabel() {
return label;
}
public String getValue() {
return value;
}
public static String getValueByLabel(String label) {
TaskResultEnums[] enums = TaskResultEnums.values();
for (TaskResultEnums anEnum : enums) {
if (anEnum.label.equals(label)) {
return anEnum.value;
}
}
return FAILED.value;
}
}
案例二:仅存放字典值
bash
public enum TaskRunStateEnums {
// 完成
AVAILABLE("available"),
// 运行中
RUNNING("running");
TaskRunStateEnums(String value) {
this.value = value;
}
private final String value;
public String getValue() {
return value;
}
}
总结:编码时,务必避免将常量值、字典值,以"魔法值"的形式硬编码写到方法中或者sql语句中,当然一些通用的除外(例如数据的删除标识 is_deleted 0 代表未删除, 1 代表以删除)。将常量值、字典值,以常量类、接口、枚举类的方式维护,可将代码显现得更美观,且方便今后排查问题和维护。