0

コードで ClassCastException を受け取りました。refreshDetailVOTable メソッドは Set のみを取得するため、当初の目的は Set を List に変換することでした。Set から List への変換に問題があった可能性があります。refreshDetailVOTable が間違ったリストを取得した可能性があるため、ClassCastException が発生しています。

調査の結果、次のことが判明しました。

私はすべての生のタイプを使用してきました。代わりにジェネリックを使用する必要があります。これらは、コンパイル時にこの種のエラーを見つけるのに役立ちます。

メソッドは、パラメーター List detailIRsToDelete を受け取り、そこからイテレーターを取得し、次のように要素を反復処理します。

         for (Iterator iDetails = detailIRsToDelete.iterator(); iDetails.hasNext();) {
             IdentifiableReference detailIR = (IdentifiableReference) iDetails.next();

誤って IdentifiableReference 以外のものを detailIRsToDelete に入れ、ループ内の代入ステートメントで ClassCastException を取得した可能性があります。

次に、リスト パラメータを次のように宣言する必要があります。

List <IdentifiableReference> detailIRsToDelete

このリストに何かを入れる行為はコンパイラーによってチェックされ、後で実行時に経験するのではなく、コンパイル時にエラーのあるオブジェクトが追加された時点でエラーが発生します。

問題: これにより Class Cast Exception が解決されるはずですが、現在の JRE 1.4 では適用できませんでした。

アップグレード以外に JRE 1.4 の回避策はありますか?

4

1 に答える 1

-1

instanceofキャストする前に使用できます

Object o = iDetails.next();
if(o instanceof IdentifiableReference)
  IdentifiableReference detailIR = (IdentifiableReference)o;
于 2013-12-11T02:56:45.950 に答える