Android 为什么在使用Parcel#writeMap(地图)时地图键需要是字符串对象?
查看文档,它清楚地指出“映射键必须是字符串对象”,但是查看代码,除了完全不必要的强制转换之外,似乎完全没有理由这样做:Android 为什么在使用Parcel#writeMap(地图)时地图键需要是字符串对象?,android,Android,查看文档,它清楚地指出“映射键必须是字符串对象”,但是查看代码,除了完全不必要的强制转换之外,似乎完全没有理由这样做: /* package */ void readMapInternal(Map outVal, int N, ClassLoader loader) { while (N > 0) { Object key = readValue(loader); Object value = readValue(loader);
/* package */ void readMapInternal(Map outVal, int N,
ClassLoader loader) {
while (N > 0) {
Object key = readValue(loader);
Object value = readValue(loader);
outVal.put(key, value);
N--;
}
}
/* package */ void writeMapInternal(Map<String,Object> val) {
if (val == null) {
writeInt(-1);
return;
}
Set<Map.Entry<String,Object>> entries = val.entrySet();
writeInt(entries.size());
for (Map.Entry<String,Object> e : entries) {
writeValue(e.getKey());
writeValue(e.getValue());
}
}
/*package*/void readMapInternal(映射outVal,int N,
类加载器(加载器){
而(N>0){
对象键=读取值(加载器);
对象值=读取值(加载器);
输出值(键、值);
N--;
}
}
/*包*/void writeMapInternal(映射值){
if(val==null){
写入(-1);
返回;
}
Set entries=val.entrySet();
writeInt(entries.size());
用于(地图条目e:条目){
writeValue(如getKey());
writeValue(如getValue());
}
}
这里有我遗漏的东西吗?知道这一点对我来说很重要,因为我正在编写一个大量使用这个类的库,它似乎是一个无缘无故的巨大限制
编辑:类似地,在编写SparseArray对象时,该类强制您
要仅传入SparseArray:
public最终无效写入parserray(SparseArray val)
这是另一个毫无意义的限制。这些是安卓API漏洞吗
编辑:答案似乎还暗示存在错误,所以为什么不改用
writeBundle
?捆绑包还需要字符串键。对我来说,writeMap函数似乎在没有字符串键的情况下可以正常工作。您希望使用哪种类型的键(如果不是字符串)?我希望处理所有类型的可传递贴图。为了便于论证,假设键只是实现Parcelableso writewriteYourMap
helper方法的某个随机对象,该方法首先写入大小,然后在循环中写入一个键,后跟一个值,当然,您也应该写入readYourMap
public final void writeSparseArray(SparseArray<Object> val)