在编程中,估计null应该是一个很常写的词汇了。
实践中,经常看到大量类似user!=null或者userList!=null的检测。当然,这么做是为了防止NullPointerException。问题是,null这么常见,它究竟是什么意思。
观察如下一段code:
String userName = "allen";
User user = userService.findUserByName(userName);
如果这里user==null的话,一般的看法应该是userService没有找到指定名字的User对象。
那么这个时候null的含义就是没有找到指定名字对应的User对象。
且慢,这段code也可以如下:
String userName = "allen";
String userId = "2011";
// 这里的null代表该时刻user对象没有初始化。
User user = null;
// 这里的null代表该时刻userService没有找到对应指定名字的User对象。
user = userService.findUserByName(userName);
if (user == null) {
// 如果这里为null,则表示userService没有找到对应指定id的User对象。
user = userService.findUserById(userId);
}
三处都是null,但是含义是各不相同的。当方法调用返回的时候,本来应该是一个有效的User对象,但是因为找不到满足条件的结果,只能返回一个null了事。
于是就有了这个意义混淆的问题,是因为java对于简单对象没有办法区分是没有初始化还是调用了方法返回了null。
但是,集合类对这个概念的混淆有着天生的抵抗力。
当一个集合类没有初始化的时候,用null。
当一个方法找不到满足条件的对象时,返回一个空的集合。
推论就是,大部分情况下,以集合类作为返回结果类型的方法应该返回非null的对象。另,方法接口保证不返回null对于调用方代码的编写也是有好处的,参见平铺直叙的代码小节。
分享到:
相关推荐
用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构_源码.rar.rar
源码介绍:用于信号的分解、降噪和重构,实现故障诊断 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
对经验模态分解后的各分量IMF进行重构代码,函数可直接调用。
reconfiguration_配电网_配电网络重构_reconfiguration_配电网重构_配电网重构_源码.zip
提取MFCC参数,再由MFCC重构幅值谱,利用幅值谱重构语音。
mutual_information_相空间重构matlab_互信息熵_源码.zip
配电网重构是一个多目标、多时段、多组合、多约束的非线性优化问题。该问题的复杂性,决定了难以用单纯的数学方法得到满意的解。尝试用改进的遗传算法进行配电网络重构,建立评价函数,寻求该评价函数最优解
数据信号处理matlab,程序实现压缩感知重构过程,仅供参考。
重构__改善既有代码的设计_高清 绝对清晰
重构——改善既有代码设计,经典文档,架构师必须教程
牛顿拉普逊法就算配电网重构的潮流程序,结构清晰易懂。
PMSM_无传感器FOC_的单分流三相电流重构算法_01299a_cn
压缩传感重构算法中的子空间追踪算法,用于信号的重构
mutual_information_相空间重构matlab_互信息熵.zip
资源名:相空间重构方法_混沌时间序列预测_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有...
对图像做小波分解和重构,并对重构后的图像与原始图像进行了对比,计算了重构与原始图像的误差
医学图像三维重构平台,实现了三维重构用VC++实现
可重构密码_博士论文_COBRA1
reconfiguration_配电网_配电网络重构_reconfiguration_配电网重构_配电网重构.zip