Почему я получаю предупреждения Сериализация ArrayList - PullRequest
2 голосов
/ 12 сентября 2011

При чтении 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 сериализуемых объектов.Код, который я сделал для написания массива, не дает мне никаких предупреждений.Я что-то здесь не так делаю?

1 Ответ

1 голос
/ 17 августа 2017

поздно, но кому-то это поможет ...

причина предупреждения в том, что метод возвратился readObject ...

см:

  public final Object readObject()

фактически возвращает объект

, и если вы просто по ошибке прочитали и десериализовали объект скажем, String и попытались преобразовать его в список массивов, вы получите исполнение во время выполнения (причинадолжно быть очевидным)

во избежание этого предсказуемого сбоя вы можете проверить тип возвращаемого объекта перед приведением ...

, поэтому вы получаете предупреждение:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...