首页 > 解决方案 > 不安全或未经检查的操作警告

问题描述

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

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

如何摆脱此警告或更改我的代码以更安全?

标签: javaandroidserializationsharedpreferencesunchecked-cast

解决方案


在这种情况下,显示了warinig,因为您正在直接解析结果

input.readObject();

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

在我看来,如果您的代码中的指令总是返回 ArrayList,这不是一个重要的警告,所以我会添加到您的方法定义中。

@SuppressWarnings("unchecked")

推荐阅读