Map数组初始化与赋值

Java泛型数组与空指针异常

事情是这样的

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

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

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

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的方法,因为既然编译通过了,那它一定可以变成可行方法,关键要看你的强大逻辑和神秘直觉。


转载于:https://my.oschina.net/u/2462382/blog/508261

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值