Boo*_*unz 0 java serialization android 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!");
}
}
Run Code Online (Sandbox Code Playgroud)
但是每当我编译该项目时,该行:
arrayOfObjects = (ArrayList<MyObject>) input.readObject();
Run Code Online (Sandbox Code Playgroud)
引起警告,包含此方法的类“使用未经检查或不安全的操作”。
如何摆脱此警告或更改代码以更安全?
在这种情况下,显示warinig的原因是您直接解析了
input.readObject();
Run Code Online (Sandbox Code Playgroud)
它将Object类型(非常通用)的Object返回到ArrayList中,并且编译器试图告诉您,它可以是任何其他类型的对象。
我认为,如果您的代码中的该指令始终返回ArrayList,那么这并不是一个重要的警告,因此我将添加到您的方法定义中。
@SuppressWarnings("unchecked")
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题并通过添加解决了它:
@SuppressWarnings("unchecked")
public class className extends AppCompatActivity {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望这个能帮上忙
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |