为什么80%的码农都做不了架构师?>>>   

空值非常麻烦,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类这样的检查工具,大大减少代码量。

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

转载于:https://my.oschina.net/gccr/blog/495862

Java中空值处理的感受相关推荐

  1. java中max函数blog_感受 lambda 之美!

    一.引言java8最大的特性就是引入Lambda表达式,即函数式编程,可以将行为进行传递.总结就是:使用不可变值与函数,函数对不可变值进行处理,映射成另一个值. 二.java重要的函数式接口 1.什么 ...

  2. JAVA中空值String拼接的坑!!!

    看下面代码 String result = "";PreparedStatement ps = null;try {ps = conn.prepareStatement(" ...

  3. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

  4. java中list去除空值_Java –从列表中删除所有空值

    java中list去除空值 介绍: 在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值 . 所以,让我们开始吧! 从Java中的 让我 ...

  5. java 数组减除值_java – 删除数组中空值的最有效方法是什么.

    我很好奇删除数组中空值的最有效方法是什么.这是我当前的null(0)删除方法. public static int[] removeNull(int[] array){ int j = 0; for( ...

  6. Java 中关于String的空对象(null) ,空值(empty),空格 的总结

    Java 中关于String 对象的空对象(null), 空值(""),空格(" ")对于很多人来说很模糊,下面将分别介绍一下他们的用法:定义,判断,运算. 首 ...

  7. Java中BigDecimal工具类(支持空值运算版)

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 需要计算的场景绕不过去会使用BigDecimal类, ...

  8. Java中的50个关键字

    2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式 ...

  9. 为什么我可以在Java中抛出null? [重复]

    本文翻译自:Why can I throw null in Java? [duplicate] This question already has an answer here: 这个问题已经在这里有 ...

最新文章

  1. vsftp匿名访问目录_vsftp 匿名访问设置设置
  2. 对于C#里面的this与base
  3. 必要商城高级UED经理张不写:设计师如何规划职业方向
  4. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
  5. SAP Spartacus界面注册用户获取OAuth Access Token的方式
  6. SAP Spartacus中使用到的Angular ModuleWithProviders类型
  7. mysql常用内置函数_mysql常见内置函数
  8. SQL Server 固定角色
  9. sqlachemy入门基础手册
  10. 华为进军美国受挫:竟被美运营商巨头临时放鸽子
  11. Activiti 工作流变量的修改方法
  12. bzoj 3165: [Heoi2013]Segment 线段树
  13. SOLIDWORKS教程:solidworks常用技巧大全
  14. Android Tool——Hierachy Viewer可视化调试
  15. 法国三家银行加入R3 Corda区块链贷款平台
  16. 计算机打数据执行保护删除不掉,XP老是出现“数据执行保护”怎么办?教你方法轻松解决此问题...
  17. Apollo搭建使用
  18. 软件工程——经验软件工程概述
  19. 使用WordPress插件自动实现百度收录查询
  20. 无法挂载sd卡(android),不能安装APK(1)

热门文章

  1. 经济危机下企业倒闭的真相
  2. mdx格式的词典用什么软件打开_视频大神都用什么软件转换视频的格式?
  3. C语言经典例98-将字符转为大写字母并写入文件
  4. 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
  5. 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 尝试进行瞬移操作 | 尝试查找飞天漏洞 )
  6. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 第三次迭代 | 中心元变换 | 检验数计算 | 最优解判定 )
  7. leetcode 两数之和 整数反转 回文数 罗马数字转整数
  8. (数论)51NOD 1135 原根
  9. Discuz!X3.1数据库的操作(三)
  10. 《零基础入门学习Python》学习过程笔记【013元组】