浏览 1664 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-12
最后修改:2011-03-06
实践中,经常看到大量类似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对于调用方代码的编写也是有好处的,参见平铺直叙的代码小节。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-12
也只能如此了。
引用 Tony Hoare, who introduced the concept of null in 1965, called his “billion dollar mistake”
引用 In Java, null is a keyword, not an object, and thus it’s illegal to call any methods on it. But this is a confusing choice on the language designer’s part. Why return a keyword when the programmer expects an object?
|
|
返回顶楼 | |
发表时间:2011-01-12
最后修改:2011-01-12
呵呵,这个的确没有什么好的办法。
billion dollar mistake,这个很贴切,当然,还有程序员写a!=null的时间,这个时间加起来不知道有多长了。 |
|
返回顶楼 | |