Java - 通过枚举避免大量 if-else
前提背景
最近写代码有一个方法需要根据不同的 key 值往 Map 集合里存储 url,代码如下:
public static void getUrl(String key, Map<String, String> map) {
if ("1000".equals(key)) {
map.put("httpUrl", "http://11");
} else if ("1001".equals(key)) {
map.put("httpUrl", "http://22");
} else if ("1002".equals(key)) {
map.put("httpUrl", "http://33");
} else if ("1003".equals(key)) {
map.put("httpUrl", "http://44");
} else if ("1004".equals(key)) {
map.put("httpUrl", "http://55");
} else if ("1005".equals(key)) {
map.put("httpUrl", "http://66");
} else if ("1006".equals(key)) {
map.put("httpUrl", "http://77");
} else if ("1007".equals(key)) {
map.put("httpUrl", "http://88");
}
}
可以看到代码里面写了大量的 if-else,并且后期可能还会继续增加。这种写法就会显得代码特别臃肿,而且不利于维护。接下来,通过 Java 枚举的方式来简化这种代码写法。
枚举实现
1、定义枚举
import java.util.LinkedHashMap;
import java.util.Map;
public enum HttpUrlEnum {
HTTP_URL_1000("1000", "http://11"),
HTTP_URL_1001("1001", "http://22"),
HTTP_URL_1002("1002", "http://33"),
HTTP_URL_1003("1003", "http://44"),
HTTP_URL_1004("1004", "http://55"),
HTTP_URL_1005("1005", "http://66"),
HTTP_URL_1006("1006", "http://77"),
HTTP_URL_1007("1007", "http://88");
// 定义 key
private String key;
// 定义 value
private String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
// 定义 构造方法
HttpUrlEnum(String key, String value) {
this.key = key;
this.value = value;
}
// 获得 map
public static Map<String, String> toMap() {
Map<String, String> map = new LinkedHashMap<String, String>();
for (HttpUrlEnum record : HttpUrlEnum.values()) {
map.put(record.getKey(), record.getValue());
}
return map;
}
}
2、代码优化
public static void getUrl(String key, Map<String, String> map) {
Map<String, String> urlMap = HttpUrlEnum.toMap();
map.put("httpUrl", urlMap.get(key));
}
如上代码所示,这样的话,如果还有新的 url,只需要在枚举里面添加上相关的枚举就可以了。