Java - 关于向下转换的ClassCastException

时间:2016-06-10 06:35:16

标签: java json gwt casting

我会尝试为gwt写一个JSONparser。

为此,我使用服务器端的lib org.json和客户端的com.google.gwt.json.client。

我构建了一些接口,用相同的方法调用这两个lib。

我用:

public class JSONObject extends com.google.gwt.json.client.JSONObject implements IJSONObject
{
  ...
}

public class JSONObject extends org.json.JSONObject implements IJSONObject
{
  ...
}

所以它就像一个沙姆,但有一件事我不会得到它。

客户端:

JSONParser.parseLenient( sJson ).isObject()

从类型返回ans对象:" com.google.gwt.json.client.JSONObject"

我尝试将其转换为我的自定义JSONObject并获得ClassCastException。

我的自定义JSONObject从com.google.gwt.json.client.JSONObject扩展并实现了我的IJSONobject。

因此,如果我无法投射该物体,我就无法使用该界面。

谢谢

2 个答案:

答案 0 :(得分:2)

您肯定会得到ClassCastException。

原因:

您正在尝试投射对象" com.google.gwt.json.client.JSONObject"进入一个对象"公共类JSONObject扩展了com.google.gwt.json.client.JSONObject",这是不可能的。

示例:

public class TestClassCast {

public static void main(String[] args) {

    A a = new A();
    B b = new B();

    A b1 = b; // This is possible since class B extends class A

    // B a1 = a; // This is not possible, which you are trying to do in your scenario.
}


}

class A {
    A(){};
}

class B extends A {
    B(){};
}

答案 1 :(得分:0)

关于向下转换的ClassCastException

我认为你应该从超级课程延伸出来。 请试试这个:

public class YourCustomJSON extends com.google.gwt.json.client.JSONValue implement IJSONobject
{
   ...
}