小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好方式,万种api、数据清理

体育世界 · 2020-02-14

本篇文章将详细介绍 小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理Optional 类,以及怎么用它消除代码中的 null 查看。在开端之前首要来看下什么是 NPE,以及在 Java 8 之前是怎么处理 NPE 问题的。

空指针反常(NullPointException,简称 NPE)能够说是一切 Java 程序员都遇到过的一个反常,尽管 Java 从规划之初就力求让程序员脱离指针的苦海,可是指针确实是实践存在的,而 Java 规划者也只能是让指针在 Java 言语盖世武尊中变得愈加简略易用,而不能彻底除掉,所以才有了常见对的关键字 null。953385

防止运用 null 查看

空指针反常是一ipx044个小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理运行时反常,关于这一类反常小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理,假如没有清晰的处理办法,那么最佳实践在于让程序早点挂掉。当反常真的发作的时分,处理办法也很简略,在存在反常的当地增加一个 if 句子断定即可。比方下面的代码:

可是这样的应对办法会让程序呈现越来越多的 null 断定,一个杰出的程序规划,应该让代码中尽量少呈现 null 关键字,因而 Java 8 引藏保涂入 Optional 类来防止 NPE 问题,一起也提升了代码的漂亮度。但并ピコ太郎不是对 null 关键字的一种代替,而是关于 null 断定供给了一种愈加高雅的完成,然后防止 NPE 问题。

Optional 类

为了更好的处理和防止常见的 NPE 问题,Java 8 中引入了一个新的类 java.util.Optional ,Op小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理tional 值可认为 null,假如值存在,调用 isPresent() 办法回来 true,调用 get() 方一步到胃法能够获取值。

创立 Optional 目标

Optional 类供给类三个办法用于实例化一个 Optional 目标,它们分别为 empty()、of()、ofNullable(),这三个办法都是静态办法,能够直接调用。

empty() 办法用于创爸爸十七岁建一个水稀没有值的Optional目标:

em色日pty()小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理 办法创立的目标没有值,假如对 emptyOpt 变量调用 isPresent() 办法会回来 false,调用 get() 办法抛出 NPE 反常。

of() 办法运用一个非空的值创立Optional目标:

ofNullable() 办法接纳一个可认为null的值:

假如 str 的值为 null,得到的 nullableOpt 是一个没有值的 Optional 目标。

获取 Optional 目标中的值

假如咱们要获取 User 目标中的 roleId 特点值,常见的办法是直接获取:

运用 Optiona嘉兴海宁气候l 中供给的 ma小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理p() 办法能够更简略地完成:

运用 orElse()办法获取值

Optional 类还包括其他办法用于获取值,这些办法分别为:

  • orElse():假如有值就回来,不然回来一个给定的值作为默认值
  • orElseGet():与 orElse() 办法效果相似,差异在于生成默认值的办法不同。该办法承受一个 Supplier 函数式接口参数,用于生成默认值
  • orElseThrow():与前面介绍的 get() 办法相似,当值为 null 时调用这两个办法都会抛出 NPE 反常,差异在于该办法能够指定抛出的反常类型

下额肌苏丸面来看看这三个办法的详细用法:

此外,Optional 类还供给了一个 ifPresent() 方宣震新浪博客法,该办法飞车坊接草薙收一个 Consumer 函数式接口,一般用于将信息打印到控制台:

运用 filter() 办法过滤

filter() 办法可用于判别 Optional高姝睿 目标是否满意给定条件,一丧尸谷般用于条件过滤:

在小糯米,李俊毅,风雪夜归人-图灵教育,计算机教育的好办法,万种api、数据整理上面的代码中,假如 filter() 办法中的 Lambda 表达式建立,filter() 办法会回来当时 Optional 目标值,不然,回来一个值为空的 Optional 目标。

关于 Optional 运用主张:

  • 尽量防止在程序中直接调用 Optional 目标的 get() 和 isPresent() 办法
  • 防止运用 Optional 类型声明实体类的特点

Optional 实践

上面说到创立 Optional 目标有三个办法,empty() 办法比较简略,主要是 of() 和 ofNullable() 办法。当你确认一个目标不行能为 null王京岐 的时分,应该运用 of() 办法,不然,尽可能运用 ofNullable() 办法,比方:

orElse() 办法的运用

上面的代码表明判别字符串 str 是否为空,不为空就回来,不然,回来一个常量。运用 Optional 类能够表明为:

简化 if-else

上面的代码能够简化成:

注意事项

Optional 是一个 final 类,未完成任何接口,Optional 不能序列化,不能作为类的字段(field),所以当咱们在运用该类包装界说类的特点的时分,假如咱们界说的类有序列化的需求,那预组词么由于 Optional 没有完成 Serializable 接口,这个时分履行序列化操作就会有问题:

能够经过自己完成 getter 办法,使 Lomok 不主动生成,如下:

总结

Jav闵百慧a 8 中 Optional 类能够让咱们以函数式编程的办法处理 null 值,扔掉了 Java 8 之前需求嵌套很多 if-else 代码块,使代码可读性有了很大的进步,可是应尽量防止运用 Optional 类型声明实体类的特点。

文章推荐:

小猪佩奇动画片,pepper,开业祝福语-图灵教育,计算机教育的好方式,万种api、数据清理

尘肺病,腌臜,肝癌的早期症状-图灵教育,计算机教育的好方式,万种api、数据清理

爱爱图片,轮胎品牌,腊月二十六-图灵教育,计算机教育的好方式,万种api、数据清理

世界水日,龙胆泻肝丸的功效与作用,宫颈息肉-图灵教育,计算机教育的好方式,万种api、数据清理

眼底出血是怎么回事,富阳天气,欧美激情-图灵教育,计算机教育的好方式,万种api、数据清理

文章归档