文档章节

Java中空值处理的感受

古城痴人
 古城痴人
发布于 2015/08/22 23:17
字数 734
阅读 289
收藏 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卿
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
04/21
0
0
JVM基础:深入学习JVM堆与JVM栈

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

李星
2014/06/04
0
0
从 java bean 的内省到 dbutils 的应用

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

peiquan
07/04
0
0
PHP-Java-Bridge使用笔记,2014年9月最新版

/============================================================ @author ken(695093513@qq.com) @date 2014-09-09 * ==============================================================/ /=......

卖小女孩的小火柴
2014/09/19
0
10

没有更多内容

加载失败,请刷新页面

加载更多

误删除innodb ibdata数据文件恢复

今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了。不知道怎么解决。当时我也不知道怎么办。后来查阅相关资料。终找到解决方法。其实恢复也挺简单...

IT--小哥
16分钟前
0
0
常见设计模式UML图

常见设计模式UML图 本文主要总结常见的设计模式的UML图,方便查阅和思考。 创建型模式 简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和单例模式,这五种设计模式主要处理对象的创建...

陶小陶
33分钟前
0
0
分布式缓存架构设计

零、 题记 在高并发场景下,需要通过缓存来减少数据库的压力,使得大量的访问进来能够命中缓存,只有少量的需要到数据库层。由于缓存基于内存,可支持的并发量远远大于基于硬盘的数据库。所以...

Ala6
35分钟前
2
0
简单工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一...

NinjaFrog
37分钟前
1
0
git(一) 基本操作(branch、tag、冲突)

layout: blog istop: true title: "git基本操作(branch、tag、冲突)" date: 2018-09-11 category: 版本控制 tags: - 版本控制 撤销操作 修改最后一次提交 解释:修改上次提交。可以修改内容...

开心的哈士奇
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部