我有Object
类型为Map<String, String>
且条目很少的ClassCastException
。我希望在将此对象投射到Map<String, Integer>
时获得Map<String, String> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", "value2");
Object o = map1;
Map<String, Integer> map2 = (Map<String, Integer>) o;
。但是演员阵容很成功。为什么这没有抛出任何异常?
o
修改:从map1
而不是{{1}}投射。
答案 0 :(得分:0)
在编译时进行通用检查,而在运行程序时进行转换检查。因此,您在运行时遇到了转换异常。
您将其解析为Integer.parseInt(String)并将值放入map2。
答案 1 :(得分:0)
你确定这是对的吗? 您的示例无法编译:
Error:(21, 60) java: incompatible types: java.util.Map<java.lang.String,java.lang.String> cannot be converted to java.util.Map<java.lang.String,java.lang.Integer>
但是,从map1更改为o,会编译:
//...
Object o = map1;
Map<String, Integer> map2 = (Map<String, Integer>) o;
也许你正在寻找这样的东西?
Map<String, String> map1 = new HashMap<>();
map1.put("key1", "1");
map1.put("key2", "2");
Map<String, Integer> map2 = new HashMap<>();
map1.forEach((key,value) -> map2.put(key, Integer.parseInt(value)));