數據庫查找數據的返回值問題

碼代碼的過程中,經常會遇到空指針的問題。今天重構代碼,發現對一個數據庫查詢操作的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,不會報空指針異常。

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