文档章节

Java中空值处理的感受

古城痴人
 古城痴人
发布于 2015/08/22 23:17
字数 734
阅读 293
收藏 12

空值非常麻烦,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
作品 0
朝阳
高级程序员
私信 提问
🛠VS Code编辑器配置Java开发环境

🛠VS Code编辑器配置Java开发环境 一、简述 及讨论 由于学校课程的原因,是基本以java开发为主线的课程,但是我对java兴趣不大,又加上我不太喜欢 「Eclipse」这个java的集成开发环境(简称...

Cc卿
2018/06/02
0
0
centos7 yum安装java运行环境,初识hadoop

安装java运行环境 1.实验机相关信息: [root@node2 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@node2 ~]# uname -r 3.10.0-327.el7.x86_6 2.配置epel源,以y......

smile68
2018/04/21
0
0
JVM基础:深入学习JVM堆与JVM栈

以前堆是干啥栈是干啥都知道,就是没连在一起想想。感觉讲的不错的一篇儿~~JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在...

李星
2014/06/04
0
0
Groove list操作-转数组,collect,each等

list转换为数组 List list = ['a','b','c','d']def strs = list as String[]println strs[0] 使用了Groovy语言,就能时不时的感受到Groovy语言在编码风格上与Java语言的不同。当然,我们首先......

SuShine
2018/08/31
0
0
从 java bean 的内省到 dbutils 的应用

java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类、属性、方法、修饰符等的应用,对于 java 的反射探讨,可以点击参考 ja...

peiquan
2018/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部