HashMap扩展 - Dict
# HashMap扩展 - Dict
简介
Dict
是 Hutool 提供的一个类似于 Python 中 dict
的数据结构,继承自 HashMap<String, Object>
,它通过实现 BasicTypeGetter
接口,提供了丰富的 getXXX
方法,用于获取不同类型的数据。此外,Dict
支持链式操作、类型转换和 Bean 转换,极大提高了 Map
的灵活性和可用性。
# 1. 创建 Dict
对象
Dict
提供了多种方式来创建一个 Dict
对象,支持链式调用,使得创建和使用更加方便。
# 示例:创建 Dict
对象
import cn.hutool.core.lang.Dict;
import cn.hutool.core.date.DateTime;
public class DictExample {
public static void main(String[] args) {
// 创建一个空的 Dict 对象
Dict dict = Dict.create();
// 使用链式调用设置键值对
dict.set("key1", 1) // int 类型
.set("key2", 1000L) // long 类型
.set("key3", DateTime.now()); // Date 类型
// 打印 Dict 内容
System.out.println(dict);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dict.create()
:创建一个新的空Dict
对象。set(String key, Object value)
:设置键值对,支持链式调用。
作用: Dict
提供了一种更加灵活和简洁的方式来创建和操作 Map
,特别适用于需要动态构建键值对集合的场景。
实际开发场景: 在处理配置数据、动态参数传递时,可以使用 Dict
来代替传统的 Map
,提高代码的可读性和操作的便捷性。
# 2. 获取指定类型的值
Dict
提供了多种获取不同类型值的方法,例如 getInt
、getLong
、getStr
等,通过这些方法可以直接获取到目标类型的数据,避免了手动类型转换的麻烦。
# 示例:获取指定类型的值
import cn.hutool.core.lang.Dict;
public class DictExample {
public static void main(String[] args) {
// 创建并设置值
Dict dict = Dict.create()
.set("key1", 1)
.set("key2", 1000L)
.set("key3", "Hutool");
// 获取值并进行类型转换
int value1 = dict.getInt("key1"); // 获取 int 类型的值
long value2 = dict.getLong("key2"); // 获取 long 类型的值
String value3 = dict.getStr("key3"); // 获取 String 类型的值
// 打印结果
System.out.println("key1: " + value1);
System.out.println("key2: " + value2);
System.out.println("key3: " + value3);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getInt(String key)
:获取int
类型的值。getLong(String key)
:获取long
类型的值。getStr(String key)
:获取String
类型的值。
作用: 这些方法使得从 Dict
中获取值时更加简洁,并且避免了手动类型转换可能带来的错误。
实际开发场景: 在处理数据集合时,通常需要从 Map 中获取不同类型的数据,Dict
的这些方法可以简化代码逻辑,减少出错几率。
# 3. 转换为 Bean
Dict
支持将自身转换为指定类型的 Bean 对象,这对于需要将动态参数封装为实体类的场景非常有用。
# 示例:转换为 Bean
import cn.hutool.core.lang.Dict;
import cn.hutool.core.bean.BeanUtil;
public class DictExample {
public static void main(String[] args) {
// 创建 Dict 并设置值
Dict dict = Dict.create()
.set("name", "Hutool")
.set("age", 5);
// 将 Dict 转换为 Bean
Person person = BeanUtil.toBean(dict, Person.class);
// 打印结果
System.out.println(person);
}
}
// 定义一个 Person 类
class Person {
private String name;
private int age;
// 省略 getter 和 setter 方法
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
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
28
29
30
BeanUtil.toBean(Map<?, ?> map, Class<T> beanClass)
:将Dict
转换为指定类型的 Bean 对象。
作用: 在需要将动态参数转换为实体对象时,Dict
提供了一种便捷的方式进行转换。
实际开发场景: 在 Web 应用中,处理请求参数并封装为实体对象时,Dict
可以作为中间桥梁进行转换。
# 4. 与 Map
的兼容性
Dict
继承自 HashMap
,因此它完全兼容 Map
的所有操作,可以在需要 Map
的场景中无缝替代 HashMap
。
# 示例:使用 Map
接口的操作
import cn.hutool.core.lang.Dict;
import java.util.Map;
public class DictExample {
public static void main(String[] args) {
// 创建 Dict
Dict dict = Dict.create()
.set("key1", "value1")
.set("key2", "value2");
// 将 Dict 作为 Map 使用
Map<String, Object> map = dict;
// 通过 Map 接口进行操作
map.put("key3", "value3");
// 打印结果
System.out.println(map);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
作用: Dict
作为 Map
的子类,可以与现有的 Map
代码兼容,减少代码重构的成本。
实际开发场景: 在需要将灵活的键值对集合传递给现有代码时,Dict
可以无缝接入。
# 5. 其他常用方法
Dict
还提供了许多实用的方法,例如:
remove(String key)
:移除指定键的值。putAll(Map<? extends String, ?> map)
:将另一个Map
的所有键值对加入到当前Dict
中。clear()
:清空所有键值对。
总结
Dict
是一个功能强大的 HashMap
扩展,它提供了更加灵活和易用的键值对操作方式。在需要处理动态参数、配置数据或进行类型安全的值获取时,Dict
是一个非常实用的工具类。通过它的链式操作、类型转换和 Bean 转换功能,可以极大提高代码的简洁性和可维护性。