不安全或未经检查的操作警告

时间:2018-09-04 10:00:17

标签: java android serialization sharedpreferences unchecked-cast

在一个应用程序中,我使用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();

引起警告,包含此方法的类“使用未经检查或不安全的操作。”

如何摆脱这种警告或将代码更改为更安全?

3 个答案:

答案 0 :(得分:3)

在这种情况下,显示warinig是因为您直接解析

的结果
input.readObject();

这将Object类型(非常通用)的Object返回到ArrayList中,编译器试图告诉您,它可能是任何其他类型的对象。

我认为,如果您的代码中的该指令始终返回ArrayList,那么这并不是重要的警告,因此我将添加到您的方法定义中。

@SuppressWarnings("unchecked")

答案 1 :(得分:0)

我遇到了同样的问题,并通过添加解决了问题:

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

我希望这会有所帮助

答案 2 :(得分:0)

我用add解决了这个问题:

@SuppressWarnings("unchecked")
public class CommLockInfoManager {