当方法的返回类型是数组或集合时,不要返回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,框架的设计还是很合理地 。
今天测试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,框架的设计还是很合理地 。
相关文章推荐
- U-BOOT的两个阶段启动过程与第二阶段的board_init_f和board_init_r
- 快捷键收集
- Bootstrap输入框组
- 第六章
- It选择
- 快速算法
- 张正友标定法
- Swift语法之 ---- ?和!区别
- 开博第一天,留贴纪念.
- 【虫师--系列18】性能测试知多少--系统计数器与硬件分析
- 在ALV列表中添加下拉框
- MySQL开启binlog
- Download 文件下载
- Android应用开发中的风格和主题(style,themes)
- git之版本回退
- JAVA中使用FTPClient上传下载
- 使用HttpClient抓取网站首页
- JavaScript判断IE各版本完美解决方案
- 【虫师--系列17】性能测试知多少---测试环境搭建
- 入门: FreeBSD10.1+Apache2.4+PHP5.4+MySQL5.5