平时使用Map时都会给定里面的元素类型,在拿到数据后用Optional判空处理,比如以下形式:
String value = Optional.ofNullable(mapData.get("xxx")).orElse("");
一般情况下没出现问题,但是今天从mongodb拿到数据后,代码走到map.get(key)
报了NPE,一开始让人有点懵逼,我做了处理啊,我是谁,我在哪?
后边才发现拿数据的接口返回的是List<Map>
类型,Map并没有指定类型,但是我获取其中对应的map是用String
接收的,String是一种引用类型,此时会将拿到的数据转化成String对象然后再进行判空,重点就是这个转化的过程,类似于一个装箱的过程,就比如 int>Integer的转化,需要使用Integer.valueOf()
方法,对应的,String会使用String.valueOf()
方法进行转化,此时就成了String.valueOf(null)
,就会报出NPE;
对于这个问题,我目前使用Object
进行接收,避免了装箱过程,在Optional
处理完后再进行转化,其他类型同理操作即可。