安卓的Bundle功能和Map有何区别?

5
我正在寻找一种将Bundle转换为HashMap的方法。我很惊讶docs中没有这样的方法。
Bundle不是等价于Map吗,其中你有String键和Object值?理论上它可以转换为映射吗?如何做到这一点?
编辑:Bundle中的键和值之间的关系是否明确?
1个回答

10
“Bundle”不等同于一个Map,因为它使用的是String作为key而非任意类型的Object。虽然Map可以存储任何类型的对象,但它无法以类型安全的方式进行操作。如果想要在Map中存储字符串、整数等数据类型,需要在调用get()方法时对结果进行强制类型转换,因为Map必须是“Map<String, Object>”类型。另外,“Bundle”实现了Parcelable接口,在Android IPC中非常重要,“Map”只是一个接口,没有扩展Parcelable。理论上,“Bundle”可以被转换成Map,但这样做的好处并不明显。如果需要这样做,可以通过遍历“keySet()”并在“Bundle”上调用“get()”方法来获取每个键的值,并将其放入“Map<String, Object>”中。

谢谢,我知道String不是唯一可以与Map一起使用的类型,我指的是Bundle可以映射的方式。 :) 好处在于与非Android感知类的通信。重要的是,Bundle中键和值之间的关系是否明确无误? - n611x007
@naxa:“Bundle 中键和值之间的关系是否明确?”--我不理解这个问题。如果你是指“键是否唯一?”,那么答案是“是”。 - CommonsWare
不确定我们是否指的是同样的事情;关键字的唯一性是否意味着并保证每个关键字只存储一个(可检索)对象? - n611x007
@naxa: “每个键只存储一个(可检索的)对象?” -- 是的。 - CommonsWare
谢谢;顺便问一下,我应该问类似、子集还是超集,而不是“等价”的Map,现在我明白了。无论如何,你已经回答了我的问题。 - n611x007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接