2011-09-12 13 views
2

SerializableオブジェクトのArrayListを読み込む際に奇妙な警告が表示されます。警告が表示されるのはなぜですか?ArrayListをシリアル化します

public void loadBoard() { 
    FileInputStream fis = null; 
    ObjectInputStream is; 
    try { 
     fis = this.openFileInput(saveFile); 
     is = new ObjectInputStream(fis); 
     // Build up sample vision board 
     if (mVisionBoard == null) { 
      mVisionBoard = new ArrayList<VisionObject>(); 
     } else { 
      mVisionBoard.clear(); 
     } 
     ArrayList<VisionObject> readObject = (ArrayList<VisionObject>) is.readObject(); 
     mVisionBoard = readObject; 
     is.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "loadBoard failed: "+e); 
    } catch (StreamCorruptedException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "loadBoard failed: "+e); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "loadBoard failed: "+e); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "loadBoard failed: "+e); 
    } 
} 

と私は取得しています警告が(readObjectメソッドライン上)である:ここにコードがある

"型の安全性:ArrayListにObjectからキャスト未チェック"

私が読んだいくつかの例は、これが直列化可能なオブジェクトのArrayListを読み取るための正しいコードであることを示しています。 arraylistを書くために私が作ったコードは、私に警告を与えていません。私はここで何か間違っていますか?

答えて

1

後半の種類が、それは、誰かを助ける...

警告の理由が原因方法readObjectのリターンである...

参照:

public final Object readObject() 

それは実際にオブジェクトを返します

あなたが間違って読んだりデシリアライズするだけであれば、文字列オブジェクトantを配列リストにキャストしようとすると、

:あなたが警告を受ける理由をキャストする前に返されたオブジェクトの種類を確認することができる予測可能な失敗を回避するために、ランタイムexecption(理由は明白でなければなりません)

...

であります

"Type safety: unchecked cast from Object to ArrayList<VisionObject>"

関連する問題