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

标签 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();

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

如何消除此警告或更改代码以使其更安全?

最佳答案

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

的结果
input.readObject();

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

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

@SuppressWarnings("unchecked")

关于java - 不安全或未经检查的操作警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52163688/

相关文章:

c# - 在 MessagePack 中将具有接口(interface)作为属性类型的对象序列化

java - 如何为翻译内存库/缓存设计高性能的键匹配算法?

java - 如何在java中从数据库生成JSON对象?

使用 Avro 工具将 JSON 转换为 Avro 后,java.io.IOException 不是数据文件

java - 将字符串转换为 "_"

android - ProGuard:保持私有(private)内部类

java - 如何为 ListView 创建自定义光标适配器以用于图像和文本?

使用 BinarySerializer 的 C# TCP 数据传输

android - 使用 Android Paging 3 库时如何显示空 View

c# - MEF 和序列化