无法将地图转换为Java类

时间:2017-05-11 12:25:29

标签: java collections

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类

3 个答案:

答案 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);

referece:Explanation of "ClassCastException" in Java