1

それらのクラスがシリアライズ可能を実装する必要があるいくつかのクラスをキャッシュする必要があるプロジェクトを開発しています。私が受け取ったエラーは、この「classcastexception: class demo.xtyA(シリアライズした任意のクラス) を class demo.xtyA にキャストできません」のようなものでした。つまり、クラスは互いにまったく同じです。

深く試した後、シリアライズ可能なクラスの代わりにシリアライズ可能を実装するJava独自のクラスを使用したときに、プログラムが機能することがわかりました。netbeans の Web サイトで提案されているプラ​​グインを使用して、netbeans で uuid を生成しました。その理由は私自身が生成したuuidであると確信していますが、なぜuuidが機能しないのですか? uuid を生成した後、クラスに変更を加えません。

serialversionUUID の上の Java デフォルト クラスには、「/** 相互運用性のために JDK 1.0.2 の serialVersionUID を使用 */」のようなコメントがあります。jdk1.0.2を使用してuuidを生成する必要があるということですか? 私は多くのことを試し、あらゆる解決策を受け入れました。返信ありがとうございます。

同じ問題に遭遇する可能性のある開発者を支援するために、使用したくない解決策があります。クラス全体をキャッシュする代わりに、各変数を個別にキャッシュできます。

初めての質問なので、質問を書き間違えてすみません。

編集:サーブレットを使用しています。サーブレットを実行すると正常に動作しますが、別のデプロイ後に失敗します。

4

1 に答える 1

0

この問題は、シリアル バージョンの UID が原因ではなく、クラスローダーの問題が原因である可能性があります。おそらく、クラス ローダー A (EHCache によって使用されるクラス ローダー) によってクラスがロードされたオブジェクトを、クラス ローダー B (Web アプリケーションのクラス ローダー) によってロードされたクラスにキャストしようとするでしょう。

詳細がないと、何をすべきかを判断するのは困難ですが、クラスが 1 つのクラス ローダーだけでロードできることを確認してください。たとえば、クラスが Web アプリケーションのクラスパス (WEB-INF/lib) とサーバーのクラスパスの両方にある場合、それが問題である可能性があります。

于 2012-09-06T07:09:34.230 に答える