0

我做了这个代码:

protected Lala lala;
private Oyeha oyeha;

public void setLala(Lala lala) {
    this.lala = lala;
}


this.oyeha = (Oyeha) this.lala;
            executeHostBean = this.oyeha.updateMethod(a, b, c, d, e);

拉拉是母班。

Oyeha是延伸Lala的孩子。

但是当我运行这段代码时,我得到了错误:

java.lang.ClassCastException: $Proxy201

我找不到我的错误在哪里。有人可以帮我解决这个问题吗?谢谢你。:)

4

3 回答 3

0

如果你有类似 Spring 注入 Lala 对象的东西,它可能正在创建一个动态代理对象(这就是错误消息所暗示的)。

如果在您的设计中绝对需要向下转换,您可能需要重新考虑设计。

于 2012-07-24T04:08:51.807 回答
0

作为其他答案的补充(他们基本上已经确定了):

假设你可以这样沮丧,这样线路就可以this.oyeha = (Oyeha) this.lala 工作,并且在 Oyeha 有一些领域,比如说,test

如果您然后尝试在this.oyeha.test某个地方使用,它怎么知道在哪里test?更糟糕的是,如果 的实例Oyeha占用了更多的内存,并且它任意选择了为 的实例预留的地址之外的地址怎么Lala办?

我想 Java 的发明者预见到了这样的情况,因此你不能将一个类型的实例转换为它的一个子类。

(我会把这个放在评论中,但是太多了)

于 2012-07-24T04:11:00.450 回答
0

您的问题可能this.lala是设置为 Lala 的一个实例,它不是Oyeha 的一个实例。由于 Oyeha 是 Lala 的子类,因此可以public void setLala使用作为 Oyeha 实例的参数进行调用,如下所示:

Lala childInstance = new Oyeha();
setLala(childInstance);

但也可以使用只是 Lala 实例的参数调用该方法,如下所示:

Lala parentInstance = new Lala();
setLala(parentInstance);

在第一种情况下,this.lala是 Oyeha,因此您可以将其施放给 Oyeha。但在后一种情况下,this.lala它只是一个 Lala,而你this.lala对 Oyeha 的演员将失败,因为 Lala 不是 Oyeha。

于 2012-07-24T04:00:33.070 回答