您的位置:首页 > 其它

当方法的返回类型是数组或集合时,不要返回null,尽量返回容量为0的数组或集合

2016-01-06 14:56 411 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

    今天测试3.0的后台代码时,遇到了一个空指针的bug,是由于调用的方法返回的是集合,由于实际返回的是null,后头有调用了这个对象的方法,导致空指针。这段代码的质量需要改善,如果返回容量为0的集合,则完全可以避免空指针。先贴错误代码。

[java]
view plaincopy

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());  
        .....  
}  

[java]
view plaincopy

@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;  
    }  
}  

    可以看出来,如果要调用queryServerListByStoreAndYn()方法的返回对象,一个必要的操作是判空!但是,调用的代码并没有进行判空,直接操作,造成了空指针一样。

    怎样让调用者省心不用判空?So easy!返回容量为零的集合。这样,既保持了代码的逻辑不变,而且调用方便不用判空。

    修改后的代码如下:

[java]
view plaincopy

@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>();  

8feb
    }  
}  

    如此一来,便可完全规避不必要的空指针异常。《effective java》一书有对这种代码的详解。

    对ibatis框架的getList();方法做了简单的测试,发现这个方法在查询无结果的情况下,返回的是一个空的ArrayList,框架的设计还是很合理地 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: