不安全或未经检查的操作警告
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.
在一个应用程序中,我使用 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.