Java:ClassCastException

时间:2012-10-25 12:31:22

标签: java casting

我目前有一个项目,我犯了一个错误,我无法弄清楚为什么它会给我这个错误。

我的结构:

Class: Variable (commands.lib.Variable);
Class: ImageLoader extends Variable (commands.lib.Variable);

然后我将变量转换为ImageLoader:

// There is a variable made with: Variable v = new ImageLoader();
public static Variable(commands.lib.Variable) getVariable(String value){...}
ImageLoader t = (ImageLoader)getVariable(ab[2]);

但这给了我一个错误:

Exception in thread "main" java.lang.ClassCastException: commands.lib.Variable cannot be cast to commands.variable.ImageLoader

当然,我用谷歌搜索了 ClassCastException ,这篇文章来自结果:Explanation of "ClassCastException" in Java

这里有人解释:

Animal a = new Dog();
Dog d = (Dog) a; // no problem, the type animal can be casted to a dog, because its a dog
Cat c = (Dog) a; // raises class cast exception, you cant cast a dog to a cat

因此,对于我的代码,它将如下所示:

Variable a = new ImageLoader();
ImageLoader b = (ImageLoader) a; // This should work, but will throw a ClassCastException
Array c = (Array) a; // This should throw a error

所以我有点无能为力。 我希望有人会帮助我,并修复错误。

问候,

罗宾

2 个答案:

答案 0 :(得分:0)

编辑:答案实际上没有回答问题,但没有删除,因为下面的评论有助于理解基本概念。

我一直对此感到困惑

但请参阅

本声明

Variable v = new ImageLoader();

您正在将ImageLoader(Subclass)的对象存储到Variable(SuperClass)这很好

但是这句话

ImageLoader t = (ImageLoader)getVariable(ab[2]);

您正在将Variable(superclass)转换为ImageLoader(SubClass) 这在java中是不允许的,因此错误

答案 1 :(得分:0)

在java中,您可以将超类强制转换为子类。我以前做过。 问题是没有制作ImageLoader。我认为它是在哪里制作的。