public class Model extends LinkedHashMap<String, Object>{
}
LinkedHashMap<String, Object> map = //instance of LinkedHashMap
Model model = (Model) map // Exception.
当我试图将LinkedHashMap<String,Object>
转换为我的Model类时,我遇到了类转换异常。
我基本上使用用户定义的方法,期望Model作为参数,这就是为什么我将我的地图投射到Model类
答案 0 :(得分:2)
您不能这样做,因为Model
不是instanceof LinkedHashMap
。考虑内存分配。你到底做了什么?您已为LinkedHashMap
分配了足够的内存,但未为Model
分配内存。编译器试图从你身上拯救你。
答案 1 :(得分:1)
您无法使用LinkedHashMap
预期Model
,因此您无法投射。
推测Model比LinkedHashMap有更多的方法和更多的功能。即使你没有在Model
类中添加任何新内容,Java也会假定你会这样做。
可能的解决方案:改变
LinkedHashMap<String, Object> map = //instance of LinkedHashMap
到
LinkedHashMap<String, Object> map = //instance of Model
另一种解决方案:更改使用Model
类的代码,改为使用Map
。
还有一种方法:不要从Model
派生Map
,让Model
拥有Map
。相应地更改代码。
通常,您需要了解有关OO编程的更多信息,尤其是那些不赞成使用聚合的现代排序。
答案 2 :(得分:0)
ClassCastException的API规范说:
抛出,表示代码已尝试将对象强制转换为不是实例的子类。
class P {
}
class C extends P {
}
P p = new P();
C c = (C) p;//java.lang.ClassCastException; Runtime Exception
如果你真的想这样做。你这样做:
LinkedHashMap map = new Model();
map.put("one", "1");
Model model = (Model) map; // Exception.
System.out.println(model);