Atitit. null错误的设计 使用Optional来处理null

然后,我们再看看null还会引入什么问题。

看看下面这个代码:

String address = person.getCountry().getProvince().getCity();

如果你玩过一些函数式语言(Haskell、Erlang、Clojure、Scala等等),上面这样是一种很自然的写法。用Java当然也可以实现上面这样的编写方式。

但是为了完满的处理所有可能出现的null异常,我们不得不把这种优雅的函数编程范式改为这样:

if (person != null) {

Country country = person.getCountry();

if (country != null) {

Province province = country.getProvince();

if (province != null) {

address = province.getCity();

}

}

}

瞬间,高逼格的函数式编程Java8又回到了10年前。这样一层一层的嵌套判断,增加代码量和不优雅还是小事。更可能出现的情况是:在大部分时间里,人们会忘记去判断这可能会出现的null,即使是写了多年代码的老人家也不例外。

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

我们看看前面提到的Person.getCountry().getProvince().getCity()怎么不用一堆if来处理。

第一种方法是不改变以前的entity:

这里用Optional作为每一次返回的外壳,如果有某个位置返回了null,则会直接得到"unkonwn"。

第二种办法是将所有的值都用Optional来定义:

 

第一种方法可以平滑的和已有的JavaBean、Entity或POJA整合,而无需改动什么,也能更轻松的整合到第三方接口中(例如spring的bean)。建议目前还是以第一种Optional的使用方法为主,毕竟不是团队中每一个人都能理解每个get/set带着一个Optional的用意。

Optional还提供了一个filter方法用于过滤数据(实际上Java8里stream风格的接口都提供了filter方法)。例如过去我们判断值存在并作出相应的处理:

 

Java函数式开发——优雅的Optional空指针处理 - 随风溜达的向日葵 - 开源中国社区.html

Atitit. null错误的设计 使用Optional来处理null相关推荐

  1. @value 默认值为null_JAVA8之妙用Optional解决判断Null为空的问题

    引言在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 user.g ...

  2. JAVA8之妙用Optional解决判断Null为空问题

    来源:https://blog.csdn.net/zjhred/article/details/84976734 背景 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullP ...

  3. 【Java基础】妙用Optional解决判断Null为空问题

    一.背景 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException. 回顾以前对null的处理方式: package com.biyu.study ...

  4. 界面交互推荐-25个闪亮创意的404错误页面设计-你从中发现了什么

    404错误页面是站长和用户都很不愿见到的页面,因为那意味着该网站不能访问.但404错误是没人能避免,如服务器出现问题,站内需要调整,收到攻击等,我们访问网站的时候,一旦遇到404提示,我们那时的感觉是 ...

  5. Atitit 项目的主体设计与结构文档 v5

    Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...

  6. 33个非常有创意的404错误页面设计

    在浏览网页的时候出现404错误是非常令人沮丧的,我敢肯定,随后的一两秒内如果没有什么吸引你的注意力的话,你会离开网站,再也不会回来.因此,很多网站都会去设计一个新颖的错误页面,以吸引用户继续浏览其它的 ...

  7. Atitit.json类库的设计与实现 ati json lib

    Atitit.json类库的设计与实现 ati json lib 1. 目前jsonlib库可能有问题,可能版本冲突,抛出ex1 2. 解决之道:1 2.1. 自定义json解析库,使用多个复合的js ...

  8. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

    Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...

  9. Atitit.ati orm的设计and架构总结 适用于java c# php版

    Atitit.ati orm的设计and架构总结 适用于java c# php版 1. Orm的目标 1 1.1. 动态obj 1 1.2. Hb的api(meger,save,update,del) ...

  10. 错误的艺术!20个创意的404错误页面设计

    拥有创造性的404错误页面和你的网站上有好的内容一样重要.有时可能是你的访客无意间访问了错误页面,你需要引导用户回到主页.在这篇文章中,我们一起来看看20个国外的创意404错误页面,相信这些精心设计的 ...

最新文章

  1. 使用Pixel Bender Toolkit制作特效——多像素采样(Part 4)
  2. MySQL Profiling 的使用
  3. C语言函数集(十七)
  4. Android 最火的快速开发框架XUtils
  5. Chapter18-Export and Import Utilities
  6. 在青岛呆了两年之后,我明白了何为工资低消费高。。。
  7. 命令 / GDB / 多进程调试 + 多线程调试
  8. JS实现倒计时三秒钟跳转到新的页面
  9. db2存储结构换Oracle,DB2中实现Oracle的功能
  10. Java8新特性总结 -7.新API和工具
  11. $.ajax的回调function中的this与 element-ui的this.$alert冲突问题解决
  12. SqlServer之xp_cmdshell_使用以及配置(转)
  13. 阿里巴巴CTO程立:践行“好科技”,我们正在做这些事
  14. 51单片机学习总结(七)红外通信和DS18B20
  15. python 批量爬取网页pdf_批量抓取网页pdf文件
  16. wword中如何在方框(□)中打钩(√)
  17. 三年程序员生涯的感悟、总结和憧憬
  18. 浅谈CMMI与敏捷体系的融合
  19. Can not modify more than one base table through a join view
  20. 5.Wide Deep Learning for Recommender Systems论文详细解读和代码实现

热门文章

  1. docker 代理_Docker点滴:如何配置docker代理
  2. Python爬虫--- 1.2 BS4库的安装与使用 1
  3. 关于文件服务器共享文件的备份与恢复
  4. 爱加密:APP安全防护 靠技术实力说爱你
  5. Activiti实战. 1.3Activiti的特点
  6. 清除centos上面kde软件的一个脚本,基本好用
  7. Ant-编译构建(2)-第3方jar包引入、log4j2
  8. Hbase架构与实现
  9. 如何用maven tycho构建自己的Eclipse RCP应用
  10. jQuery源码06-jQuery = function(){};给JQ对象,添加一些方法和属性,extend : JQ的继承方法,jQuery.extend()...