Предупреждение о небезопасных или непроверенных операциях - PullRequest
0 голосов
/ 04 сентября 2018

В приложении я использую SharedPrefernces для сохранения / загрузки (сериализации / десериализации) некоторых объектов.

Это код десериализации:

private void loadData() {

    String str = sharedPreferences.getString(PREF_TAG, null);

    byte[] bytes = Base64.decode(str, Base64.DEFAULT);

    try {
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        ObjectInputStream input = new ObjectInputStream(bais);
        arrayOfObjects = (ArrayList<MyObject>) input.readObject();
    } catch (Exception e) {
        Log.i("BUG", "error decoding serialized objects: " + e.toString());
    }

    if (arrayOfObjects == null) {
        Log.i("BUG", "serious problem!");
    }

}

Но всякий раз, когда я компилирую этот проект, строка:

arrayOfObjects = (ArrayList<MyObject>) input.readObject();

вызывает предупреждение о том, что класс, содержащий этот метод, "использует непроверенные или небезопасные операции".

Как мне избавиться от этого предупреждения или изменить свой код на более безопасный?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

У меня была такая же проблема, и я решил ее, добавив:

@SuppressWarnings("unchecked")
public class className extends AppCompatActivity {
...
}

Надеюсь, это поможет

0 голосов
/ 04 сентября 2018

В этом случае показывается warinig, потому что вы непосредственно анализируете результат

input.readObject();

Это возвращает объект типа Object (который является настолько универсальным) в ArrayList, и компилятор пытается сказать вам, что это может быть любой другой тип объектов.

По моему мнению, это не главное предупреждение, если эта инструкция в вашем коде всегда возвращает ArrayList, поэтому я бы добавил к определению вашего метода.

@SuppressWarnings("unchecked")
...