您的位置:首页 > 其它

Map数组初始化与赋值

2015-09-18 00:00 876 查看
摘要: Map类型数组初始化、实例化、赋值,空指针异常问题。

事情是这样的

我在后台存放一些示例数据,每个map都手动赋值再存到mapList里,随着数据量的增多,代码中出现了一串一串的超相似代码。map.put()由于要放不同的值也就算了,map初始化和mapList.add()真是难以容忍。

于是想到用map数组的方法。

Map<String,String>[] mapArray=new Map
;

mapArray[i].put();

这样是可以编译通过的,可是运行时却出现了空指针异常。

原因是泛型具有类型的不确定性,而数组的定义必须确定其元素类型,所以泛型数组在初始化时会面临类型擦除的问题。

也就是对于编译器来说HashMap<Integer,Integer>和HashMap<String,String>是相同的。初始化并没有完成,所以出现了空指针异常。

那该如何办嘞?上网去查,原来大家都知道原因啊,但是没有人给出解决办法,什么不支持、无法编译、无法转化,什么这样不对要用mapList。哼!

还好我灵机一动,没有初始化,那就给它初始化被。

for(int i = 0; i < n; i++){

mapArray[i] = new HashMap<String,String>();

}

这样再进行赋值就没有问题了。

如果你仍需要List类型

List<Map<String,String>> mapList= Arrays.asList(mapArray);

我之所以没有还原成List方法而是仍然找Array的方法,因为既然编译通过了,那它一定可以变成可行方法,关键要看你的强大逻辑和神秘直觉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息