Java中的Collections checkedMap()方法及示例
在Java语言中,Collections类提供了许多方便的方法来操作不同类型的集合。其中,checkedMap()方法是一个非常有用的方法,它可以确保只有指定类型的键和值可以添加到Map对象中。
checkedMap()方法的介绍
checkedMap()方法的作用是返回一个指定类型的Map对象,并在运行时防止添加不合法的元素。具体说来,checkedMap()方法会返回一个装饰器对象,该对象将与它包装的Map对象相同,但是它会使用指定类型的键和值来强制执行类型安全检查。
checkedMap()方法的定义如下:
public static <K,V> Map<K,V> checkedMap(Map<K,V> map, Class<K> keyType, Class<V> valueType)
checkedMap()方法的参数是一个Map对象、一个键的类型和一个值的类型。它将返回一个与传入的Map对象具有相同行为和类型安全性的Map装饰器。
checkedMap()方法的示例
下面的示例展示了如何使用checkedMap()方法来创建一个只能保存字符串键和整型值的Map对象:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Example {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
// 使用checkedMap()方法创建一个只能保存字符串键和整型值的Map对象
Map<String,Integer> checkedMap = Collections.checkedMap(map, String.class, Integer.class);
// 添加一个键值对,类型正确
checkedMap.put("key1", 1);
// 添加一个键值对,类型不正确
checkedMap.put("key2", "string");
// 输出Map对象
System.out.println("Map对象: " + checkedMap);
}
}
运行以上代码会输出如下结果:
Exception in thread "main" java.lang.ClassCastException: Attempt to insert class java.lang.String element into collection with element type class java.lang.Integer
at java.base/java.util.Collections$CheckedMap.put(Collections.java:2592)
at Example.main(Example.java:14)
从结果可以看出,由于在调用checkedMap()方法时指定了键的类型为String,当我们在尝试将一个值为字符串的键值对添加到Map对象中时,Java会抛出ClassCastException异常,提示我们插入了错误类型的元素。
下面是修改后可以正常执行的代码:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Example {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
// 使用checkedMap()方法创建一个只能保存字符串键和整型值的Map对象
Map<String,Integer> checkedMap = Collections.checkedMap(map, String.class, Integer.class);
// 添加一个键值对,类型正确
checkedMap.put("key1", 1);
// 添加一个键值对,类型不正确
try {
checkedMap.put("key2", "string");
} catch (ClassCastException e) {
System.out.println("插入了错误类型的元素: " + e.getMessage());
}
// 输出Map对象
System.out.println("Map对象: " + checkedMap);
}
}
运行以上代码会输出如下结果:
插入了错误类型的元素: Attempt to insert class java.lang.String element into collection with element type class java.lang.Integer
Map对象: {key1=1}
从结果可以看出,我们在插入错误类型的元素时,捕捉到了ClassCastException异常并输出了具体错误信息,而正确类型的元素被成功添加到了Map对象中。
结论
在Java中,Collections checkedMap()方法可以确保我们只能向Map对象中添加指定类型的键和值,从而在运行时防止添加不合法的元素。使用checkedMap()方法时,我们需要传递一个Map对象,以及键和值的类型。checkedMap()方法会返回一个装饰器对象,它将与它包装的Map对象具有相同的行为和类型安全性。
当我们尝试将一个不合法的元素添加到使用checkedMap()方法创建的Map对象中时,Java会抛出ClassCastException异常,提示我们插入了错误类型的元素,从而确保程序的可靠性和安全性。