我的 Boot 应用程序中有一个复杂的enum类,它为不同的系统保存不同的状态值。
package com.foo;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public enum Status {
FOO_STATUS("Status1" ,"status_1", "STATUS_1", "stat1"),
BAR_STATUS("Status2" ,"status_2", "STATUS_2", "stat2" ),
FOO1_STATUS("Status3" ,"status_3", "STATUS_3", "stat3" ),
BAR1_STATUS("Status4" ,"status_4", "STATUS_4", "stat4" ),
....
....
....
private final String system1Status;
private final String system2Status;
private final String system3Status;
private final String system4Status;
private static Map<String, String> statusMap;
Status(String system1Status, String system2Status, String system3Status, String system4Status) {
this.system1Status = system1Status;
this.system2Status = system2Status;
this.system3Status = system3Status;
this.system4Status = system4Status;
}
public String getSystem1Status() {
return system1Status;
}
public String getSystem2Status() {
return system2Status;
}
public String getSystem3Status() {
return system3Status;
}
public String getSystem4Status() {
return system4Status;
}
private static void initializeMapping() {
statusMap = new HashMap<>();
for (Status map : Status.values()) {
statusMap.put(map.getSystem1Status(), map.getSystem2Status());
}
}
public static String getSystem2StatusForSytem1Status(String status) {
if (statusMap == null) {
initializeMapping();
}
if (statusMap.containsKey(status)) {
return statusMap.get(status);
}
return null;
}
public static String getSystem3StatusForSytem1Status(String status) {
....
}
public static String getSystem4StatusForSytem2Status(String status) {
....
}
public static String getSystem3StatusForSytem2Status(String status) {
....
}
....
....
}
枚举保存了各种系统的状态字符串Map。它还提供了通过提供当前系统状态来获取不同系统状态的方法。
例如:我们可以通过发送系统2状态值来获取系统1状态。
随着枚举变得越来越复杂,是否有替代方法来保存此静态数据?
PS:我知道这可以移动到DB中的引用表,但我正在寻找代码中的任何替代(如从yaml文件加载)。
1条答案
按热度按时间8aqjt8rx1#
对枚举变得越来越复杂的担忧只有在这种复杂性是偶然的,而不是固有的情况下才是有效的。否则,切换到不同的方法只会将这种复杂性转移到其他地方(在您的示例中似乎就是这种情况)。我认为如果满足以下条件,保留枚举(即使它变得复杂)是有意义的: