为什么我收到Serialize ArrayList的警告

时间:2011-09-12 15:19:03

标签: android arraylist serializable

在阅读Serializable对象的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行上):

  

“输入安全性:取消选中从Object到ArrayList的转换”

我读过的几个例子表明这是读取可序列化对象的ArrayList的正确代码。我编写arraylist的代码并没有给我任何警告。我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

有点迟到但它会帮助某人...

警告的原因是因为返回方法readObject ...

请参阅:

  public final Object readObject()

它实际返回一个对象

如果你只是错误地读取和反序列化一个让我们说String对象ant尝试将其转换为数组列表然后你会得到一个运行时execption(原因必须明显)

为了避免可预测的失败,你可以在演员之前检查返回对象的类型......

这就是你收到警告的原因:

  

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