3

わかりました、私は周りを見回して多くのグーグル検索を行ってきましたが、まだこの警告を回避する方法を見つけることができません.

Integer result = chooser.showOpenDialog(null);
if (result.equals(0))
{
    String tempHolder = chooser.getSelectedFile().getPath();
    filenameLoad = new File(tempHolder);
    filenameSave = filenameLoad;
    FileInputStream fis = null;
    ObjectInputStream in = null;
    try
    {
        fis = new FileInputStream(filenameLoad);
        in = new ObjectInputStream(fis);;
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
    }

    try
    {
        loadFile = (ArrayList<Dot>)in.readObject();
    }
    catch(IOException ex)
    {
        System.out.println("Cast fail");
    }
    catch(ClassNotFoundException ex)
    {
        System.out.println("Cast fail");
    }
    catch (ClassCastException ex)
    {
        System.out.println("Cast fail");
    }

    try
    {
        in.close();
    }
    catch(Exception ex)
    {
        System.out.println("failed to close in");
    }
    save.setEnabled(true);
      gpanel.setDotList(loadFile);
  }

loadFile = (ArrayList)in.readObject(); という行で警告が表示されます。キャッチを追加したので、まだキャッチされていないと言う理由がわかりません。何か助けはありますか?ありがとう?

4

5 に答える 5

10

「キャッチされていない」のではなく、「チェックされていない」のです。JVM は、実行時、つまりキャストが完了したときに、ArrayList に実際に Dot 要素が含まれているかどうかを判断できません。

この警告は、生の型からジェネリック型にキャストするたびに発生します。キャストに問題がないことが確実な場合は、注釈を使用して警告を抑制することができます

@SuppressWarnings("unchecked")

このためには、キャストを小さな別のメソッドにカプセル化することをお勧めします。

于 2011-04-12T07:07:20.673 に答える
2

オブジェクトが返されたかどうかを確認していません

in.readObject();

本当に

ArrayList<Dot>

使用する

ArrayList<Dot> dotList = null;
Object obj = in.readObject();
if (obj instanceof ArrayList<Dot>)
{
dotList = (ArrayList<Dot>) obj;
}
于 2011-04-12T07:10:05.853 に答える
1

とは言いませんがuncatched(正しくは綴られていますuncaught)、しかしunchecked. ジェネリック型にキャストする場合、この警告を回避することはできません。抑制することしかできません。または、次の方法で回避できます。

@SuppressWarnings("unchecked")
public static <T> T castToAnything(Object obj) {
  return (T) obj;
}

このメソッドを使用すると、次のように記述できます。

loadFile = castToAnything(in.readObject());
于 2011-04-12T07:09:49.443 に答える
0

これは、コンパイラが、読み込んだオブジェクトがキャスト先の型と一致することを確認できないことを意味します。したがって、チェックされていない警告。

ところで: エラー処理をよりシンプルかつ明確にするために作業することをお勧めします。;)

于 2011-04-12T07:07:28.650 に答える
0

ArrayList<Dot>表示されるのは、Object が Foo の List ではなく、実際に Dot の List を含むかどうかを最初にチェックせずに、Object を に変換しようとしているというコンパイラの警告です。

于 2011-04-12T07:08:12.580 に答える