Java中空值处理的感受
Java中空值处理的感受
古城痴人 发表于2年前
Java中空值处理的感受
  • 发表于 2年前
  • 阅读 210
  • 收藏 12
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: Java中NullPointerException是出现最多的异常,也是最容易引起系统Bug的一个原因,但是如何解决这个问题呢?总结一下自己对Java中空值处理的一些感受

空值非常麻烦,Java中的空指针异常让人崩溃,Java程序中还是遍布null检查。

** null是一个讨厌鬼 **

null语义不明,通常null什么都不能代表,而又什么都能代表。如果你不检查,空指针异常必定会蹦出来。

对于集合类型来说,空有两种含意:

1、变量是空引用,也就是变量没指向一个集合类型。

2、集合中元素数量为0。

所以经常我们要检查 list != null && list.size() > 0

对于空值最常用的办法就是:不相信任何输入输出值,每个一参数都需要检查。

这样可以解决问题,但是出现另一个棘手的事情:

  • 增加代码长度

大部分代码都是在检查空值上面;一个方法100行代码,有50行是检查各种参数,49进行异常处理,1行调用方法进行业务处理。这是什么事儿啊。

  • 减少写代码的乐趣

注意力集中的时间段是非常保贵的。现在的互联网公司,办公区开放、各部分门的混坐一起,一个程序员从早到晚不停的被打扰,8小时工作时间能集中精力2个小时已经很不容易了。而这短短的有效时间内,还要编写大量的防御性代码,对于我来说,大量编写这样的代码经常会让我思路分散,导致我在真正的业务代码上面出错。

** 这个问题怎么破?**

实话是很难破,多年编码后也仅仅总结了几个做法可以减轻空值带来的痛苦

  • 所有返回的集合对象都不返回null,而是返回size=0的空集合
  • 除非null有特殊含意,方法返回的普通对象都不为null

如从数据库查找对象的方法:findById,这个返回null表示没有这个对象,可以返回null

  • 使用基本的值类型,而不使用包装过的类型

使用int double 等等,不使用Integer

  • 免不了有null时,使用guava中的Optional对象

可以方便的检查和操作null,JDK8以后也在java.util包中增加了Optional对象。

  • 集合对象中不保存null

Map中不保存value为null的K-V对儿,也不用null做key。

  • 使用高效工具对入参为null进行检查

如Guava中的Preconditions类这样的检查工具,大大减少代码量。

以上只是自己在写程序过程中的一些感受,如果有同行朋友有建议,请留言,谢谢!

共有 人打赏支持
粉丝 16
博文 16
码字总数 19276
×
古城痴人
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: