安全投射到哈希映射
2022-09-02 19:30:09
如何安全地将映射转换为哈希映射?
我想避免类转换异常
HashMap<String, String> hMap;
public void setHashMap(Map map){
hMap = (HashMap<String, String>) map;
}
如何安全地将映射转换为哈希映射?
我想避免类转换异常
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);
通常,不能将 a 类型转换为 a,而不会有类强制转换异常的风险。如果 是,则强制转换将(并且必须)失败。Map
HashMap
Map
TreeMap
您可以通过在转换之前使用来检查类型来避免异常,但是如果测试显示“不是HashMap”,则您就会陷入困境。您将无法使铸件正常工作。instanceof
实际的解决方案是:
hMap
Map
HashMap
Map
HashMap
(这些方法都不适用于所有情况...但是,如果没有地图用途的更多详细信息,我无法提出具体建议。
当你使用它时,向有问题的库的提供者提交错误报告可能是合适的。强制使用特定的 Map 实现(从表面上看)是一个坏主意。