1

BlueJでJavaクラスをコンパイルすると、次のエラーが発生します。

AuctionManager.java uses unchecked or unsafe operations.

このエラーは、次の逆シリアル化コードが関数の 1 つにある場合にのみ表示されます。

try {
  ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
  ArrayList<AuctionItem> AuctionList = (ArrayList<AuctionItem>) in.readObject();
  in.close();
}
catch (Exception e) {
  e.printStackTrace();
}

このエラーが表示される理由と、エラーなしで逆シリアル化コードを使用するための助けを教えてください。

4

2 に答える 2

1

user2351151 : 警告が表示されない場合は、これを行うことができます:

ArrayList tempList; // without parameterized type 
try {
  ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
  tempList = (ArrayList) in.readObject();
  for (int i = 0; i < tempList.size(); i++) {
    AuctionList.add(i, (AuctionItem)tempList.get(i)); // explict type conversion from Object to AuctionItem
  }
  in.close();
}
catch (Exception e) {
  e.printStackTrace();
}

明示的な型変換で ArrayList を書き直す必要があります (パラメーター化された型なしで一時的な ArrayList を使用できます)。

于 2013-06-05T00:17:32.747 に答える
1

まず、表示されるメッセージはエラーではなく、警告です。プログラムのコンパイルや実行が妨げられることはありません。

ソースに関しては、次の行です。

ArrayList<AuctionItem> AuctionList = (ArrayList<AuctionItem>) in.readObject();

オブジェクト (をreadObject返すObject) をパラメーター化された型 ( ArrayList<AuctionItem>) にキャストしているため。

于 2013-05-13T02:42:28.443 に答える