今天遇到一个特别难以发现的空指针问题
代码如下:
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;
标签:JAVA,之超,bookId,findBookDetailById,BookDetailDto,Objects,bookDetail,指针,metaData
From: https://blog.csdn.net/qq_44922250/article/details/139511173