1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @Getter @AllArgsConstructor @EnumMapping(value = "code") @JsonFormat(shape = JsonFormat.Shape.OBJECT) @ApiModel("采样器运行状态") public enum OperationStatus {
Running ("0", "待机"), AutoSampling ("1", "自动采样中")
;
private String code; private String desc;
public static OperationStatus getEnum(String code){ switch (code){ case "0": return Running; case "1": return AutoSampling; default: return null; } } }
|
枚举常量新增、删除、修改等都需要对该函数进行对应的修改,耦合非常高。
优化↓
1 2 3 4 5 6 7 8
| public static OperationStatus getByCode(String code) { for (OperationStatus operationStatus : OperationStatus.values()) { if (operationStatus.code.equals(code)) { return operationStatus; } } return null; }
|
通过这种改进,后面需要对枚举常量进行修改,该函数不需要改动。
但是每次获取枚举对象都要遍历一次枚举数组,时间复杂度是O(n)。
优化↓
1 2 3 4 5 6 7 8 9
| private static final Map<String,OperationStatus> cache = new HashMap<>(); static { for (OperationStatus operationStatus :OperationStatus.values()){ cache.put(operationStatus.getCode(),operationStatus); } } public static OperationStatus getEnum(String code){ return cache.getOrDefault(code,null); }
|
时间复杂度为 O(1),性能有所提升。
每个枚举类中都需要编写类似的代码,繁琐。
引入上述工具的枚举类,如果仅使用枚举常量,也会触发静态代码块的执行。