Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-ClassCastException在downcast上_Java_Json_Gwt_Casting - Fatal编程技术网

Java-ClassCastException在downcast上

Java-ClassCastException在downcast上,java,json,gwt,casting,Java,Json,Gwt,Casting,我将尝试为gwt编写JSONparser 为此,我在服务器端使用lib org.json,在客户端使用com.google.gwt.json.client 我构建了一些接口,用相同的方法调用这两个库 我使用: public class JSONObject extends com.google.gwt.json.client.JSONObject implements IJSONObject { ... } 及 所以它像沙姆一样工作,但有一件事我不明白 客户端: JSONParser.pa

我将尝试为gwt编写JSONparser

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

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

我使用:

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

所以它像沙姆一样工作,但有一件事我不明白

客户端:

JSONParser.parseLenient( sJson ).isObject()
从类型中返回ans对象:“com.google.gwt.json.client.JSONObject”

我尝试将其转换为我的自定义JSONObject并得到一个ClassCastException

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

因此,如果我不能强制转换对象,我就不能使用该界面


谢谢你

ClassCastException downcast

我认为你应该从超级班扩展。 请试试这个:

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

降级时的ClassCastException

我认为你应该从超级班扩展。 请试试这个:

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

你肯定会得到ClassCastException

原因:

您正在尝试将对象“com.google.gwt.json.client.JSONObject”强制转换为对象“public class JSONObject extensed 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(){};
}

你肯定会得到ClassCastException

原因:

您正在尝试将对象“com.google.gwt.json.client.JSONObject”强制转换为对象“public class JSONObject extensed 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(){};
}


仅仅因为该方法返回对父类的引用,并不意味着它也是您的子类类型。但我知道它是:P我只添加了方法而不是属性这段代码的哪一部分:
JSONParser.parseLenient(sJson).isObject()
使用您的自定义类?然后是您的答案。如果它甚至不使用您的代码,就不能期望它引用您的对象。对吗?仅仅因为该方法返回对父类的引用就意味着它也是您的子类类型。但我知道它是:P我只添加了方法而不是属性这段代码的哪一部分:
JSONParser.parseLenient(sJson).isObject()
使用您的自定义类?然后是您的答案。如果它甚至不使用您的代码,就不能期望它引用您的对象。对吗?但我不想要JSONValue?!但我不想要JSONValue?!但它们完全相同,没有一些方法。我可以不强制吗?不,我们不能强制。我有一些其他的想法如何实现类似的东西吗?这是不可能的,因为子类可以强制转换为父类,而父类不能强制转换为子类。参考我的示例代码,B是A的子级,所以B的实例可以转换为A,反之亦然。即,A b1=b;是允许的,且B a1=a;是不允许的,明白了。但是远离沮丧你有什么办法来解决我的问题。。。我的界面似乎不起作用,但它们完全一样,没有一些方法。我可以不强制吗?不,我们不能强制。我有一些其他的想法如何实现类似的东西吗?这是不可能的,因为子类可以强制转换为父类,而父类不能强制转换为子类。参考我的示例代码,B是A的子级,所以B的实例可以转换为A,反之亦然。即,A b1=b;是允许的,且B a1=a;是不允许的,明白了。但是远离沮丧你有什么办法来解决我的问题。。。我的界面似乎不起作用