前记: 翻看《Java 核心技术》第13章集合,看到EnumMap 一种键值属于枚举类型的映射表。想起前几天有个需求:文件上传如果出错,返回给用户的消息形如为
错误的行号和原因:
2,4,6 商品id为必填项
1,7 应用标识错误
8 时间格式错误
由于错误原因是有限的,可以用枚举ErrMsgEnum表示。起初利用 HashMap<ErrMsgEnum,String> 来保存,了解了EnumMap内部是利用数组存储后,更改为EnumMap<ErrMsgEnum,String> 效率更高
实现
1. ErrMsgEnum.java
public enum ErrMsgEnum { required_item_id("商品id为必填项" ), invalid_app_id("应用标识错误" ), invalid_date("时间格式错误" ); private String value; private ErrMsgEnum(String value) { this .setValue(value); } public String getValue() { return value; } public void setValue(String value) { this .value = value; } }
2. TestEnumMap.java
import java.util.EnumMap; import java.util.Map; public class TestEnumMap { public static void main(String[] args) { EnumMap<ErrMsgEnum,String> errMsgMap = new EnumMap<ErrMsgEnum,String>(ErrMsgEnum. class ); errMsgMap.put(ErrMsgEnum.required_item_id, "2,4,6" ); errMsgMap.put(ErrMsgEnum.invalid_app_id, "1,7" ); errMsgMap.put(ErrMsgEnum.invalid_date, "8" ); for (Map.Entry<ErrMsgEnum,String> entry:errMsgMap.entrySet() ){ System.out.println(entry.getValue()+ " " + entry.getKey().getValue()); } } }
注意事项
1. 使用EnumMap时,必须指定枚举类型。All of the keys in an enum map must come from a single enum type that is specified, explicitly or implicitly, when the map is created.
2. key不能为null Null keys are not permitted
3. EnumMap内部以数组实现,性能更好。Enum maps are represented internally as arrays. This representation is extremely compact and efficient.