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);

ララは親クラスです。

オエハはララを拡張した子です。

しかし、このコードを実行すると、エラーが発生しました:

java.lang.ClassCastException: $Proxy201

私の間違いがどこにあるのかわかりません。誰かがこの問題を解決するのを手伝ってくれませんか? ありがとうございました。:)

4

3 に答える 3

0

SpringがLalaオブジェクトを注入するようなものがある場合、それは動的プロキシオブジェクトを作成している可能性があります(これがエラーメッセージが示唆していることです)。

デザインでダウンキャストが絶対に必要な場合は、デザインを再考することをお勧めします。

于 2012-07-24T04:08:51.807 に答える
0

あなたの問題はおそらく、Oyeha のインスタンスではないthis.lalaLala のインスタンスに設定されていることです。Oyeha は Lala のサブクラスであるため、次のように Oyeha のインスタンスである引数を使用して呼び出すことができます。public void setLala

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

ただし、次のように、単に Lala のインスタンスである引数を使用してそのメソッドを呼び出すこともできます。

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

前者はオエハthis.lalaなのでオエハにキャストできる。しかし、後者の場合、this.lalaは単なるララであり、this.lalaララはオエハではないため、オエハへのキャストは失敗します。

于 2012-07-24T04:00:33.070 に答える
0

他の回答への追加として(基本的にはすでに釘付けになっています):

ラインが機能するように、そのようにダウンキャストでき、 Oyehathis.oyeha = (Oyeha) this.lala にいくつかのフィールドがあったとしtestます。

次に、どこかを使用しようとした場合this.oyeha.test、どこにあるかをどのように知るのでしょうtestか? さらに悪いことに、 のインスタンスがOyehaかなり多くのメモリを消費し、 のインスタンス用に取っておいたアドレス以外のアドレスを恣意的に選択するとどうなるLalaでしょうか?

Java の発明者はそのような状況を予見していたので、型のインスタンスを取り、そのサブクラスの 1 つにキャストできないようにしたのではないかと思います。

(これをコメントに入れたかったのですが、多すぎます)

于 2012-07-24T04:11:00.450 に答える