Atitit. null错误的设计 使用Optional来处理null
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相关推荐
- @value 默认值为null_JAVA8之妙用Optional解决判断Null为空的问题
引言在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 user.g ...
- JAVA8之妙用Optional解决判断Null为空问题
来源:https://blog.csdn.net/zjhred/article/details/84976734 背景 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullP ...
- 【Java基础】妙用Optional解决判断Null为空问题
一.背景 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException. 回顾以前对null的处理方式: package com.biyu.study ...
- 界面交互推荐-25个闪亮创意的404错误页面设计-你从中发现了什么
404错误页面是站长和用户都很不愿见到的页面,因为那意味着该网站不能访问.但404错误是没人能避免,如服务器出现问题,站内需要调整,收到攻击等,我们访问网站的时候,一旦遇到404提示,我们那时的感觉是 ...
- Atitit 项目的主体设计与结构文档 v5
Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...
- 33个非常有创意的404错误页面设计
在浏览网页的时候出现404错误是非常令人沮丧的,我敢肯定,随后的一两秒内如果没有什么吸引你的注意力的话,你会离开网站,再也不会回来.因此,很多网站都会去设计一个新颖的错误页面,以吸引用户继续浏览其它的 ...
- Atitit.json类库的设计与实现 ati json lib
Atitit.json类库的设计与实现 ati json lib 1. 目前jsonlib库可能有问题,可能版本冲突,抛出ex1 2. 解决之道:1 2.1. 自定义json解析库,使用多个复合的js ...
- Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?
Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...
- 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) ...
- 错误的艺术!20个创意的404错误页面设计
拥有创造性的404错误页面和你的网站上有好的内容一样重要.有时可能是你的访客无意间访问了错误页面,你需要引导用户回到主页.在这篇文章中,我们一起来看看20个国外的创意404错误页面,相信这些精心设计的 ...
最新文章
- 使用Pixel Bender Toolkit制作特效——多像素采样(Part 4)
- MySQL Profiling 的使用
- C语言函数集(十七)
- Android 最火的快速开发框架XUtils
- Chapter18-Export and Import Utilities
- 在青岛呆了两年之后,我明白了何为工资低消费高。。。
- 命令 / GDB / 多进程调试 + 多线程调试
- JS实现倒计时三秒钟跳转到新的页面
- db2存储结构换Oracle,DB2中实现Oracle的功能
- Java8新特性总结 -7.新API和工具
- $.ajax的回调function中的this与 element-ui的this.$alert冲突问题解决
- SqlServer之xp_cmdshell_使用以及配置(转)
- 阿里巴巴CTO程立:践行“好科技”,我们正在做这些事
- 51单片机学习总结(七)红外通信和DS18B20
- python 批量爬取网页pdf_批量抓取网页pdf文件
- wword中如何在方框(□)中打钩(√)
- 三年程序员生涯的感悟、总结和憧憬
- 浅谈CMMI与敏捷体系的融合
- Can not modify more than one base table through a join view
- 5.Wide Deep Learning for Recommender Systems论文详细解读和代码实现
热门文章
- docker 代理_Docker点滴:如何配置docker代理
- Python爬虫--- 1.2 BS4库的安装与使用 1
- 关于文件服务器共享文件的备份与恢复
- 爱加密:APP安全防护 靠技术实力说爱你
- Activiti实战. 1.3Activiti的特点
- 清除centos上面kde软件的一个脚本,基本好用
- Ant-编译构建(2)-第3方jar包引入、log4j2
- Hbase架构与实现
- 如何用maven tycho构建自己的Eclipse RCP应用
- jQuery源码06-jQuery = function(){};给JQ对象,添加一些方法和属性,extend : JQ的继承方法,jQuery.extend()...