1

我有一个父类,比如 P 类和三个子类,比如 C1、C2 和 C3。我type在类 P 中有一个变量来确定子类的类型。我有一个 P 向量,其中包含 C1、C2 和 C3 的几个实例,我使用 Gson 库将该向量对象转换为 JSON。type当我使用 Gson 从 JSON 重建向量时,将类型设为 Vector<P> (我为此使用 TypeToken)我得到一个类 P 的向量,但是当我根据变量将 P 对象转换为任何子类时I获取 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;
    }
}
4

1 回答 1

1

当你反序列化时,你会得到一个 P 的向量,所以你不能转换为基类,因为具体类是 P (而不是 C[1-3] 中的每个对象Vector。我认为这是你获得期望的结果是编写自己的反序列化器。

我写了一个非常详细的答案,具有相同的概念。它使用 aList而不是 a Vector(更灵活)并使用字符串来匹配基类。其余的正是你应该继续的方式。

于 2013-10-30T06:26:19.057 回答