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

Unsafe or unchecked operations warning

在一个应用程序中,我使用 SharedPrefernces save/load (serialize/deserialize) 一些对象。

这是反序列化代码:

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

导致警告 class 包含此方法 "uses unchecked or unsafe operations."

我怎样才能摆脱这个警告或更改我的代码以更安全?

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

的结果
input.readObject();

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

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

@SuppressWarnings("unchecked")

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

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

希望对您有所帮助

我通过添加解决了这个问题:

@SuppressWarnings("unchecked")
public class CommLockInfoManager {

感谢之前给出答案的所有人。 如果你写

@SuppressWarnings("unchecked")

你告诉java: “请不要检查命令下的内容。” 这不是解决此错误的方法。 如果你想解决问题,你不能使用接口和 select 一些名称 class.