Java8简明学习之Optional
Java在8的版本,新增了Optional和lambda表达式,使得日常开发中对于NullPointException的判断变的优雅。
现在来个例子看看在Optional之前对空的判断。
@Test
public void testOpt() {
User u = new User();
u.setName("hy");
if (u != null && u.getName() != null) {
System.out.println(u.getName());
} }
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如果层级更深的话,那就更难看一些...
看看通过Optional改造后的版本
@Test(expected = MyException.class)
public void testOpt() {
User s = new User();
s = null;
// s.setName(null);
Optional<User> opt = Optional.ofNullable(s);
String name = opt.map(user -> user.getName()).orElseThrow(()-> new MyException("异常"));
//Assert.assertEquals("hy", name);
System.out.println(name);
}
public class MyException extends RuntimeException {
MyException() {
}
MyException(String mgs) {
super(mgs);
}
}
没有了恼人的if判空,变的优雅很多,其实lambda表达式使之前很多很繁琐的表达变的优雅,以后也会把更多的优雅用法贴到这里备忘。
Java8简明学习之Optional的更多相关文章
- Java8简明学习之Lambda表达式
函数式接口 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,函数式接口可以被隐式转换为lambda表达式. 之前已有的函数式接口: java.lang.Runnable java.uti ...
- Java8简明学习之新时间日期API
由于历史原因,在之前的版本里无论Date还是Calendar都非常难用,尤其在涉及到日期计算方面,而且其中日期转换的类DateForamt还是非线程安全的.也正因为难用,一般项目里面都引入第三方的类库 ...
- Java8简明学习之接口默认方法
接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现. public interface DefaultInterFace { int plus(int x, ...
- java8学习之Optional深入详解
自上次[http://www.cnblogs.com/webor2006/p/8243874.html]函数式接口的学习告一段落之后,这次来学习一下Optional,它并非是函数式接口的概念,点击查看 ...
- Java8简明指南
Java8简明指南 转载自并发编程网 – ifeve.com本文链接地址: Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何 ...
- WebPack 简明学习教程
WebPack 简明学习教程 字数1291 阅读22812 评论11 喜欢35 WebPack是什么 一个打包工具 一个模块加载工具 各种资源都可以当成模块来处理 网站 http://webpack. ...
- 乐字节-Java8新特性之Optional
上一篇小乐带大家了解了Java新特性之Stream,接下来将会继续述说Java新特性之Optional Optional<T>类(java.util.Optional)是一个容器类,代表一 ...
- java8新特性之Optional类
NullPointException可以说是所有java程序员都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java ...
- 乐字节Java8核心特性之Optional类
大家好啊,上次小乐给大家介绍了Java8最最重要的一个特性——Stream流,点击可以回顾哦. Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在 ...
随机推荐
- sublime-text-how-to-jump-to-file-from-find-results-using-keyboard
http://209.116.186.231/#newwindow=1&q=sublime+text+find+results+jump http://stackoverflow.com/qu ...
- spring boot 使用application.properties 进行外部配置
application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环 ...
- Dockerfile指令详解下
VOLUME 定义匿名卷 VOLUME指令的格式为: VOLUME [,...] VOLUME 之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库 ...
- 清除float的方法
清除浮动有两种方法: 一种是加入clear:both: 一种是BFC申明: <!doctype html><html><head><meta charset= ...
- Java并发(一)-了解线程安全
线程不安全性 先来举例说明线程不安全是什么情况下发生的:例如一个变量可以被多个线程进行访问,那么在大量线程并发访问这个变量的情况下,线程执行的顺序会给最后的结果带来不可预估的错误. 先定义一个单例类S ...
- WebDriverAPI(4)
单击某个元素 采用元素id.click()方法即可 双击某个元素id.doubleClick 操作单选下拉列表 测试网页HTML代码 <html> <body> <sel ...
- Win7上装CentOS7 双系统
今天折腾了半天,终于在Win7上把CentOS装上了,Win7和CentOS双系统共存,可自由切换. 你问我为什么不装在虚拟机上,我只能说我的电脑卡得一B. 装机参考: 1.Window7+CentO ...
- VMware里Ubuntukylin-14.04-desktop的VMware Tools安装图文详解
不多说,直接上干货! 总的来说,根据分为三个步骤. 步骤一: 点击 :虚拟机—–>安装VM tools 然后发现桌面会跳出如下问题: 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 ...
- android 解决studio生成aar包并在其他工程引用aar包的坑,不需要任何gradle配置
1.首先我们创建一个module 2.编写我们的一个类 3.编译我们的module,生成release版本的aar,注意千万不要是debug版本的, 点击最右边的gradle面板,选择我们的modul ...
- 解决ssh登陆超时方案
ssh登陆一般默认3分钟无操作则断开连接,有时候还是很烦的,于是解决这个问题. sudo修改/etc/ssh/sshd_conf文件 #sudo vim /etc/ssh/sshd_config #在 ...