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



在一个应用程序中,我正在使用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 类型的 Object(非常通用(返回到 ArrayList 中,编译器试图说,它可以是任何其他类型的对象。

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

@SuppressWarnings("unchecked")

我遇到了同样的问题,并通过添加以下内容解决了它:

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

我希望这会有所帮助

我用 add 解决了这个问题:

@SuppressWarnings("unchecked")
public class CommLockInfoManager {

致之前给出答案的每个人。 如果你写

@SuppressWarnings("unchecked")

你告诉java: "请不要检查命令下的内容。" 这不是解决此错误的方法。 如果你想解决问题,你必须不要使用接口并选择一些名称类。

最新更新