我有一个父类,比如P类和三个子类,比如C1,C2和C3。我在P类中有一个type
变量来确定子类的类型。我有一个P的向量,其中包含C1,C2和C3的几个实例,我使用Gson库将该向量对象转换为JSON。当我使用Gson从JSON重建矢量时给出类型为Vector< P> (我使用TypeToken)我得到了一个类P的向量,但是当我根据type
变量将P对象转换为任何子类时,我得到了ClassCastException。我怎么能毫无例外地实现这一目标?
Type t = new TypeToken<Vector<P>>() {}.getType();
Vector ps=(Vector<P>)gson.fromJson(jsonString,t);
for(P pObj : ps ) {
if(pObj.type == 1) {
C1 cObj=(C1)pObj;
}
else if(pObj.type == 2) {
C2 cObj=(C2)pObj;
}
else if(pObj.type == 3) {
C3 cObj=(C3)pObj;
}
}
答案 0 :(得分:1)
当你反序列化时,你得到一个P的向量,所以你不能转换为基类,因为具体的类是P(而不是Vector
中每个对象的C [1-3]。我认为你获得所需结果的唯一机会就是编写自己的反序列化器。
我写了一个非常详细的answer,它有相同的概念。它使用List
而不是Vector
(更灵活)并使用字符串来匹配基类。剩下的就是你应该继续前进的方式。