数据库查找数据的返回值问题

码代码的过程中,经常会遇到空指针的问题。今天重构代码,发现对一个数据库查询操作的List类型的返回值进行操作时,从来没有出现空指针异常,而我知道这个查询的数据很大部分情况下在数据库中并没有记录。既然没有数据那List<Object>类型的返回值不是null就是size = 0的空List。我在使用这个List<Object>类型的返回值进行操作时(即调用它的方法)时没有报空指针异常,说明我的数据库查询操作返回的是一个size = 0的空List。突然想起来,我之前特意验证过这个问题,只不过又忘记了,所以在这里记录一下。知道了这个情况后,就可以省去空指针判断了,毕竟,代码里有很多空指针判断的话,影响代码美观,不容易阅读。我们应该避免空指针的产生,而不是进行大量的空指针判断。例如我们初始化一个List时,尽量不要赋值为null,而是new 一个出来。我们不会频繁的new对象,所以初始化的时候new一个对象,并不会在堆上占用很多内存。

1.SpringBoot jpa

  查询数据,返回List。

List<DeviceBindInfoBean> bindUserList = deviceBindInfoRepository.findAllByUserId(userId);
if (bindUserList.stream().map(DeviceBindInfoBean::getDeviceId).anyMatch(item ->item.equals(deviceId))) {
            throw new UserHasBindDeviceException();
}

如果数据库没有记录,if语句也不会报空指针异常,因为bindUserList是一个size = 0的空List。

2.SpringBoot + MyBatis

List<CommonBodyInfo> commonBodyInfoList =
              balanceMeasureInfoMapper.getHomePageDataFromMaster(memberId, RECENTLY_MEASURE_NUMBER);
if (commonBodyInfoList.isEmpty()) {
    try (Jedis jedis = jedisPool.getResource()){
         jedis.del(key);
         return Lists.newArrayList();
        }
}

数据库没有数据,也是返回size = 0的空List,调用isEmpty()方法不会报空指针异常。

3.Java8 Stream

List<String> list = Lists.newArrayList("1","2");
List<String> collect = list.stream().filter(a -> a.equals("3")).collect(Collectors.toList());
System.out.println(collect.size());

输出0,不会报空指针异常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章