【问题标题】:Why am I getting warnings Serialize ArrayList为什么我收到警告 Serialize ArrayList
【发布时间】:2011-11-15 10:49:38
【问题描述】:

我在阅读 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 的正确代码。我编写数组列表的代码没有给我任何警告。我在这里做错了吗?

【问题讨论】:

    标签: android arraylist serializable


    【解决方案1】:

    有点晚了,但它会帮助别人......

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

    见:

      public final Object readObject()
    

    它实际上返回一个对象

    如果你只是错误地读取并反序列化了一个让我们说 String 对象 ant 尝试将其转换为数组列表,那么你将得到一个运行时执行(原因必须很明显)

    为了避免这种可预测的失败,您可以在强制转换之前检查返回对象的类型...

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

    "Type safety: unchecked cast from Object to ArrayList&lt;VisionObject&gt;"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2012-08-10
      • 2021-07-31
      相关资源
      最近更新 更多