概述

到目前为止,著名的NullPointerException是导致Java应用程序失败的最常见原因。过去,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。

Optional 被定义为一个简单的容器,其值可能是null或者不是null。在Java 8之前一般某个函数应该返回非空对象但是偶尔却可能返回了null,而在Java 8 以后,不推荐你返回null而是返回Optional。

方法

Optional类主要有以下方法:

  • empty(): 返回空的 Optional 实例。
  • equals(Object obj): 判断其他对象是否等于 Optional。
  • filter(function): 如果值存在,并且这个值经过方法返回true,返回一个Optional用以描述这个值,否则返回一个空的Optional。
  • flatMap(function): 如果值存在,返回经过函数加工的Optional类,否则返回一个空的Optional
  • get(): 如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException
  • hashCode(): 返回存在值的哈希码,如果值不存在 返回 0。
  • ifPresent(function): 如果值存在则使用该值调用 consumer , 否则不做任何事情。
  • isPresent(): 如果值存在则方法会返回true,否则返回 false。
  • map(function): 如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。
  • static of(value): 返回一个指定非null值的Optional。
  • static ofNullable(value): 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
  • orElse(other): 如果存在该值,返回值, 否则返回 other。
  • orElseGet(function): 如果存在该值,返回值, 否则触发 方法,并返回方法调用的结果。
  • orElseThrow(function): 如果存在该值,返回包含的值,否则抛出方法指定的异常
  • toString(): 返回一个Optional的非空字符串

其中的方法都可以使用lambda表达式的

Java8 Optional类相关推荐

  1. Java8 Optional类用法

    文章目录 API介绍 第一组 Optional(T value) empty() of(T value) ofNullable(T value) 第二组 orElse(T other),orElseG ...

  2. 新容器!不再担心空指针, Java8 Optional类

    Optional<T>类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在.或者仅仅保存null,表示这个值不存在.原来用 null 表示一个值不存 ...

  3. Java8新特性Optional类

    这里写自定义目录标题 Java8 Optional 类 前言 创建 Optional 实例 Optional API常用接口的用法 get()方法 isPresent()方法 isPresent()方 ...

  4. Java8新特性 Optional类

    作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...

  5. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  6. java8新特性(5)— Optional 类

    java8新特性(5)- Optional 类 空指针解决方案 package com.common.jdk8;import java.util.Optional;//Optional 类是一个可以为 ...

  7. Java8新特性总结 - 2.Optional类

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  8. Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)

    目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行   Stream的.max方 ...

  9. Java8新特性之空指针异常的克星Optional类

    Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...

最新文章

  1. 2018-3-12论文(非结构网络中有价值信息数据挖掘)笔记二-----作者:关联规则的非结构网络有价值信息数据挖掘(看不懂,看不懂)
  2. python 全景图像拼接( python3.6 + opencv3.4.2.16) 融合
  3. 分享 - Social.framework
  4. android view父级隐藏,Android指定的子级已经有父级。必须先对子级的父级调用removeView()...
  5. 深度学习实战 | 使用Kera预测人物年龄
  6. Hbase协处理器实践总结(hbase数据同步)
  7. Bruce的程序员语录
  8. 【18】Python半成品购物车
  9. SpringCloud——消息驱动
  10. 简单一招就能进行不同平台的推文转移,复制粘贴。
  11. mt6577驱动开发 笔记版
  12. EndNote修改导入文献格式的方法
  13. SRAM随机存储器的特点及结构
  14. nexus安装与使用
  15. HTML5历史状态管理history API-pushState/replaceState与popstate事件
  16. html5中的meter标签改变颜色规则
  17. 互联网产品都是怎么做推广的?(app产品推广)
  18. db2 10.1 数据库文件介绍
  19. 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】
  20. 4k影视文件存储服务器方案,存储系统4K网络存阵列服务器储

热门文章

  1. 计算机专业网站的开题ppt,.计算机专业开题报告.ppt
  2. android 组件路由框架,XRouter:组件化路由框架
  3. Java学习路线,你值得了解
  4. 10个简单的 Java 性能调优技巧
  5. 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
  6. php 执行mysql查询_php中执行mysql的常用操作
  7. js 正则 长度不超过50_如何花不超过50元人民币,拍抖音网红海马体照片?
  8. css 查看更多_在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)...
  9. iis7 php5 isapi配置,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程
  10. 基于matlab的fisher线性判别及感知器判别_基于嵌入表示的网络实体对齐方法进展概述...