JAVA踩坑日记之超隐蔽但常见空指针问题

今天遇到一个特别难以发现的空指针问题

代码如下:

        BookDetailDto bookDetail = metaDataDetailDao.findBookDetailById(bookId);
        if (null == bookDetail) {
            bookDetail = metaDataTempDao.findBookDetailById(bookId);
        }
        // 如果简介为空,去meta data查
        if (Objects.isNull(bookDetail) || StringUtils.isBlank(bookDetail.getMetaDescription())) {
            MetaData metaData = metaDataDao.selectById(bookId);
            if (Objects.nonNull(metaData)) {
                bookDetail.setMetaDescription(metaData.getIntroduction());
            }
        }
        return bookDetail;

怎么样,看起来是不是没什么问题,还进行了空指针的判断!!!

但是当两次数据库都没有查数据时,bookDetail就会为空,在bookDetail.setMetaDescription(metaData.getIntroduction());时就会出现空指针异常

即使是在第一行BookDetailDto bookDetail = new BookDetailDto();也不行.

至于为什么我猜想是数据库查询查不到时会把对象置空,所以在用的时候重新声明下就可以了

        BookDetailDto bookDetail = metaDataDetailDao.findBookDetailById(bookId);
        if (null == bookDetail) {
            bookDetail = metaDataTempDao.findBookDetailById(bookId);
        }
        // 如果简介为空,去meta data查
        MetaData metaData = metaDataDao.selectById(bookId);
        if (Objects.isNull(bookDetail)) {
            bookDetail = new BookDetailDto();
        }
        if (StringUtils.isBlank(bookDetail.getMetaDescription())) {
            if (Objects.nonNull(metaData)) {
                bookDetail.setMetaDescription(metaData.getIntroduction());
            }
        }
        return bookDetail;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值