2011-09-12 7 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() 

을 실제로 객체를 반환합니다

실수로 읽기 및 비 직렬화를하면 String 객체가 배열 목록에 캐스팅됩니다. 그러면 다음과 같이 얻을 수 있습니다. 런타임 execption ... 당신은 주조 이전에 반환 된 객체의 유형을 확인할 수 예측 오류를 방지하기 위해

(이유가 분명해야합니다) 당신이 경고를받을 이유

:

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

관련 문제