枚举类是一种很实用的类型,在标识状态一类的应用中,使用起来十分方便。当然我们也可以用map来替代枚举类型的功能,虽然简单,但是阅读起来map要比枚举稍微差一些,可以根据情况来选择。
map
比较清晰的直接赋值为一个map形式。
package github.banana;
import java.util.HashMap;
import java.util.Map;
/**
* 供应商类型和描述
*/
public class TP {
public static String getName(String id) {
Map<String, String> map = new HashMap<>();
map.put("1", "携程");
map.put("2", "国航");
map.put("4", "东航");
map.put("8", "南航");
map.put("16", "携程一期H5");
map.put("32", "必去");
map.put("64", "携程H5抓取");
map.put("128", "必去国际");
map.put("256", "就旅行");
map.put("512", "必去候补");
map.put("1024", "去哪儿");
map.put("2048", "携程H5阿拉丁");
map.put("ctrip", "携程");
return map.getOrDefault(id, "未知");
}
}
使用枚举来实现。
package github.banana;
/**
* 供应商类型和描述
*/
public enum EnumTP {
CTRIP("1", "携程"),
CA("2", "国航"),
MU("4", "东航"),
CZ("8", "南航"),
CTRIPH5("16", "携程一期H5"),
BIQU("32", "必去"),
CTRIPCRAWL("64", "携程H5抓取"),
BIQUINT("128", "必去国际"),
BIQUSTANDARD("256", "就旅行"),
QUNAR("512", "去哪儿"),
CTRIPHTALADDIN("1024", "携程H5阿拉丁"),
CTRIPV2("ctrip", "携程");
// 供应商标识
private String index;
// 供应商描述
private String name;
EnumTP(String index, String name) {
this.index = index;
this.name = name;
}
// 获取供应商中文名称
public static String getName(String index) {
for (EnumTP enumTP:EnumTP.values()) {
if (index.equals(enumTP.index)) {
return enumTP.name;
}
}
return "未知";
}
}
可以看出,如果操作本身比较简单,其实选择哪一种都是比较合乎逻辑的。但就是设计来说,map因数据结构的关系,理论上会更快一些,如果做持久化后。不过这些性能,可能并不明显。
package github.banana;
public class TPTest {
public static void main(String[] args) {
String partner = "256";
System.out.println(TP.getName(partner));
System.out.println(EnumTP.getName(partner));
}
}