如何安全地将地图转换为哈希地图?
我想避免类强制转换异常
HashMap<String, String> hMap;
public void setHashMap(Map map){
hMap = (HashMap<String, String>) map;
}
您可以制作(浅)副本:
HashMap<String, String> copy = new HashMap<String, String>(map);
或如果还不是HashMap,则将其投射:
HashMap<String, String> hashMap =
(map instanceof HashMap)
? (HashMap) map
: new HashMap<String, String>(map);
您的函数应如下所示,以避免发生诸如ClassCastException
或NullPointerException
之类的任何异常。在这里,任何类型的Map
对象都将分配给HashMap
到您的类的字段中。
public void setHashMap(Map<String, String> map) {
if (map != null && map instanceof HashMap<?, ?>) {
hMap = (HashMap<String, String>) map;
} else if (map != null) {
hMap.putAll(map);
}
}
[通常,如果没有类转换例外的风险,则无法将Map
转换为HashMap
。如果Map
是TreeMap
,则强制转换将(并且必须)失败。
您可以avoid通过在投射前使用instanceof
来检查类型来异常,但是如果测试显示“不是HashMap”,则您将陷入困境。您将无法使演员表正常工作。
实际解决方案是:
hMap
声明为Map
而不是HashMap
,Map
条目复制到新创建的HashMap
中,或HashMap<String, String>
,为什么不这样做呢?