Dict
# 功能介绍
Dict是Hutool中提供的字典Map实现,是对普通Map的增强,提供了更便捷的方法来获取不同类型的值。它支持链式调用、自动类型转换、默认值处理等功能,大大简化了Map的使用,特别适合在频繁获取不同类型值的场景中使用。
# 主要特性
- 支持链式调用,简化Map操作
- 支持自动类型转换,直接获取所需类型的值
- 支持设置默认值,避免空指针异常
- 支持获取基本类型及其包装类型
- 支持获取日期、时间类型
- 支持获取集合类型(List、Set、Map等)
- 基于HashMap实现,性能优异
- 支持null键和null值
- 线程不安全,建议在单线程环境下使用
# 适用场景
- 需要频繁获取不同类型值的场景
- 需要链式操作Map的场景
- 需要处理可能为空值的场景
- 需要自动转换值类型的场景
- Web开发中处理请求参数
- 数据传输对象(DTO)的替代方案
- 配置信息的存储和获取
# 使用示例
# 示例1:基本用法
// 创建Dict
Dict dict = Dict.create()
.set("name", "hutool")
.set("version", "7.0.0")
.set("author", "looly")
.set("stars", 10000)
.set("isActive", true);
// 获取字符串值
String name = dict.getStr("name");
// 输出: hutool
// 获取整数值
int version = dict.getInt("version");
// 输出: 700
// 获取长整型值
long stars = dict.getLong("stars");
// 输出: 10000
// 获取布尔值
boolean isActive = dict.getBool("isActive");
// 输出: true
# 示例2:链式调用
// 创建Dict并链式设置值
Dict dict = Dict.create()
.set("name", "hutool")
.set("version", "7.0.0")
.set("author", "looly");
// 链式获取值并转换类型
String info = dict.getStr("name") + " v" + dict.getInt("version") + " by " + dict.getStr("author");
// 输出: hutool v700 by looly
# 示例3:设置默认值
Dict dict = Dict.create()
.set("name", "hutool")
.set("version", "7.0.0");
// 获取存在的键,返回对应值
String name = dict.getStr("name", "default");
// 输出: hutool
// 获取不存在的键,返回默认值
String author = dict.getStr("author", "unknown");
// 输出: unknown
// 获取不存在的整型值,返回默认值
int downloads = dict.getInt("downloads", 0);
// 输出: 0
# 示例4:获取集合类型值
Dict dict = Dict.create()
.set("tags", ListUtil.of("java", "tool", "util"))
.set("contributors", SetUtil.of("looly", "张三", "李四"))
.set("versions", MapUtil.of("current", "7.0.0", "previous", "6.0.0"));
// 获取List类型值
List<String> tags = dict.getList("tags", String.class);
// 输出: [java, tool, util]
// 获取Set类型值
Set<String> contributors = dict.getSet("contributors", String.class);
// 输出: [looly, 张三, 李四]
// 获取Map类型值
Map<String, String> versions = dict.getMap("versions", String.class, String.class);
// 输出: {current=7.0.0, previous=6.0.0}
# 示例5:与普通Map互转
// Dict转普通Map
Dict dict = Dict.create()
.set("name", "hutool")
.set("version", "7.0.0");
Map<String, Object> map = dict.toMap();
// 普通Map转Dict
Map<String, Object> normalMap = MapUtil.of("name", "hutool", "version", "7.0.0");
Dict dict2 = Dict.parse(normalMap);
// 获取值
String name = dict2.getStr("name");
// 输出: hutool
# 注意事项
- Dict是线程不安全的,在多线程环境下使用需要额外同步
- 自动类型转换可能会失败,特别是对于复杂类型转换
- 支持null值,但获取基本类型时,null值会转换为对应类型的默认值(如0、false等)
- 性能与HashMap相当,适合大多数场景
- 链式调用时,返回的是当前Dict对象,便于连续操作
- Dict.create()是创建Dict的推荐方式,比直接new Dict()更简洁
# 方法列表
Dict继承自HashMap,除了支持所有Map接口方法外,还提供了以下特有方法:
| 方法名 | 描述 | 参数 | 返回值 |
|---|---|---|---|
| create() | 创建Dict实例 | 无 | Dict |
| parse(Map<?, ?> map) | 将普通Map转换为Dict | map: 普通Map | Dict |
| set(K key, V value) | 设置键值对,支持链式调用 | key: 键, value: 值 | Dict |
| getStr(String key) | 获取字符串值 | key: 键 | String |
| getStr(String key, String defaultValue) | 获取字符串值,带默认值 | key: 键, defaultValue: 默认值 | String |
| getInt(String key) | 获取整数值 | key: 键 | int |
| getInt(String key, int defaultValue) | 获取整数值,带默认值 | key: 键, defaultValue: 默认值 | int |
| getLong(String key) | 获取长整型值 | key: 键 | long |
| getLong(String key, long defaultValue) | 获取长整型值,带默认值 | key: 键, defaultValue: 默认值 | long |
| getDouble(String key) | 获取双精度浮点型值 | key: 键 | double |
| getDouble(String key, double defaultValue) | 获取双精度浮点型值,带默认值 | key: 键, defaultValue: 默认值 | double |
| getBool(String key) | 获取布尔值 | key: 键 | boolean |
| getBool(String key, boolean defaultValue) | 获取布尔值,带默认值 | key: 键, defaultValue: 默认值 | boolean |
| getDate(String key) | 获取日期值 | key: 键 | Date |
| getDate(String key, Date defaultValue) | 获取日期值,带默认值 | key: 键, defaultValue: 默认值 | Date |
| getList(String key, Class | 获取List类型值 | key: 键, elementType: 元素类型 | List |
| getSet(String key, Class | 获取Set类型值 | key: 键, elementType: 元素类型 | Set |
| getMap(String key, Class | 获取Map类型值 | key: 键, keyType: 键类型, valueType: 值类型 | Map<K, V> |
| toMap() | 转换为普通Map | 无 | Map<String, Object> |