如何实现新的 `.getSerializable()` 方法以从已保存的实例捆绑中将数据反序列化为哈希映射?
如何实现新的 `.getSerializable()` 方法以从已保存的实例捆绑中将数据反序列化为哈希映射?
我之前使用的是bundle.getSerializable("data") as HashMap
,但是在将sdkVersion
更改为33
之后,.getSerializable()
API被更新了。
我无法将其用于HashMap
。
我尝试了以下代码:
savedInstanceState.getSerializable("answer", HashMap
但是它给出了警告 -
只有类可以在类字面量的左侧使用
经过一些搜索,我找到了这篇帖子
上面引用的答案如下 -
您不能在
class
中使用泛型
现在我还没有找到解决这个问题的方法。有什么建议吗?
问题的出现原因是:在Android中,当我们需要将数据从一个地方传递到另一个地方时,常常使用Bundle来保存和传递数据。在某些情况下,我们可能需要将一个HashMap对象保存到Bundle中,然后再从Bundle中取回并反序列化为HashMap对象。然而,在过去的实现中,Bundle类只提供了一个getSerializable()方法来反序列化对象,但它不能直接反序列化为HashMap对象。
解决方法是:Android开发团队已经意识到这个问题,并在后续版本中添加了一个新的getSerializable()方法,可以通过传递HashMap::class.java作为第二个参数来将数据反序列化为HashMap对象。然后,我们可以将结果强制转换为HashMap
以下是一个示例代码,演示了如何使用新的getSerializable()方法来将数据反序列化为HashMap对象:
val map = HashMap
map[1] = 123
val bundle = Bundle()
bundle.putSerializable("answer", map)
val serializedMap = bundle.getSerializable("answer", HashMap::class.java) as HashMap
println(serializedMap[1])
这个示例代码中,我们首先创建一个HashMap对象,并将其保存到Bundle中。然后,我们使用新的getSerializable()方法从Bundle中取回保存的对象,并将其强制转换为HashMap
同样的方法也适用于ArrayList对象。只需将ArrayList.class作为第三个参数传递给新的getSerializable()函数,并将结果强制转换为ArrayList
通过使用这个新的getSerializable()方法,我们可以更方便地将数据从Bundle中反序列化为HashMap或ArrayList对象,使得数据的传递和处理更加简单和高效。