Java-ClassCastException在downcast上
我将尝试为gwt编写JSONparser 为此,我在服务器端使用lib org.json,在客户端使用com.google.gwt.json.client 我构建了一些接口,用相同的方法调用这两个库 我使用: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
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;是不允许的,明白了。但是远离沮丧你有什么办法来解决我的问题。。。我的界面似乎不起作用