java - 不安全或未经检查的操作警告
问题描述
在一个应用程序中,我使用 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")
推荐阅读
- javascript - 如何让 html 文件从 config.js 文件中读取值
- java - 通过多对多关系将 Enum 分组到不同条件的有效设计
- javascript - 探测
- c - 您是否特别需要 malloc 为链表的新元素分配内存
- python - Flask:蓝图未显示自定义错误页面
- javascript - 找不到模块“newman”需要堆栈:
- node.js - 使用 Node.js 和 Mongoose 哪些步骤可以保存引用第一个文档和第二个文档?
- c# - 从脚本中禁用 MRTK 求解器组件
- javascript - jQuery 插件在 PHP While 循环中不起作用
- node.js - 有没有办法使用 Search Tweets: Full Archive / Sandbox with node.js?