版权声明:本文为博主原创文章,未经博主允许不得转载。
今天测试3.0的后台代码时,遇到了一个空指针的bug,是由于调用的方法返回的是集合,由于实际返回的是null,后头有调用了这个对象的方法,导致空指针。这段代码的质量需要改善,如果返回容量为0的集合,则完全可以避免空指针。先贴错误代码。
- public Result queryStoreServiceAttendList(AttendParamVo vo) {
- Result result = new Result();
- try {
- List<AnalysisDetailBean> details = attendanceManager.queryStoreServiceAttendList(vo);
- List<ServerPopBean> allService = storeService.queryServerListByStoreAndYn(vo.getStoreId());
- Map<String, ServiceAttendAnalysisVo> attentVoMap = new HashMap<String, ServiceAttendAnalysisVo(allService.size());//null pointer!
- int totalDays= DateUtils.getIntervalDays(vo.getStartDate(), vo.getEndDate());
- .....
- }
- @Override
- public List<ServerPopBean> queryServerListByStoreAndYn(int storeId) {
- try {
- if(storeId != 0){
- return serverPopManager.queryServerListByStoreAndYn(storeId);
- }else{
- return null;
- }
- } catch (Exception e) {
- log.error("Query server list by store and yn error!", e);
- return null;
- }
- }
怎样让调用者省心不用判空?So easy!返回容量为零的集合。这样,既保持了代码的逻辑不变,而且调用方便不用判空。
修改后的代码如下:
- @Override
- public List<ServerPopBean> queryServerListByStoreAndYn(int storeId) {
- try {
- if(storeId != 0){
- return serverPopManager.queryServerListByStoreAndYn(storeId);
- }else{
- return new ArrayList<ServerPopBean>();
- }
- } catch (Exception e) {
- log.error("Query server list by store and yn error!", e);
- return new ArrayList<ServerPopBean>();
- }
- }
对ibatis框架的getList();方法做了简单的测试,发现这个方法在查询无结果的情况下,返回的是一个空的ArrayList,框架的设计还是很合理地 。