【发布时间】:2014-12-27 18:13:54
【问题描述】:
在我的应用程序中,我有一个名为 mSelectedContacts 的成员变量 HashSet<Integer> 的活动,它是活动状态的一部分,所以我将它保存在 onSaveInstanceState() 中,如下所示
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable(STATE_SELECTED_CONTACTS, mSelectedContacts);
super.onSaveInstanceState(savedInstanceState);
}
当重新创建活动时,我会像这样获取存储的 Hashset。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null &&
savedInstanceState.containsKey(STATE_SELECTED_CONTACTS)) {
mSelectedContacts = (HashSet<Integer>)
savedInstanceState.getSerializable(STATE_SELECTED_CONTACTS);
} else
mSelectedContacts = new HashSet<Integer>();
...
现在这工作正常,但它会生成一个未经检查的强制转换警告(从 java.io.serializable 到 java.lang.Integer)。是否有其他方法可以将可序列化对象保存到包中,然后在不收到此警告的情况下检索它? (当然除了压制它:-))
【问题讨论】:
-
不,我认为没有任何办法。我知道的唯一方法是让可序列化采用整数的泛型。但是,显然我们不能在这里这样做。因此,如果您知道它不会采取任何其他措施,那么压制战争是最好的方法。据我所知