Java 8 新特性001_Java 8 Optional 类
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
类声明
以下是一个 java.util.Optional<T> 类的声明:
类方法
序号 | 方法 & 描述 |
---|---|
1 |
static <T> Optional<T> empty()
返回空的 Optional 实例。 |
2 |
boolean equals(Object obj)
判断其他对象是否等于 Optional。 |
3 |
Optional<T> filter(Predicate<? super <T> predicate)
如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。 |
4 |
<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional |
5 |
T get()
如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException |
6 |
int hashCode()
返回存在值的哈希码,如果值不存在 返回 0。 |
7 |
void ifPresent(Consumer<? super T> consumer)
如果值存在则使用该值调用 consumer , 否则不做任何事情。 |
8 |
boolean isPresent()
如果值存在则方法会返回true,否则返回 false。 |
9 |
<U>Optional<U> map(Function<? super T,? extends U> mapper)
如果存在该值,提供的映射方法,如果返回非null,返回一个Optional描述结果。 |
10 |
static <T> Optional<T> of(T value)
返回一个指定非null值的Optional。 |
11 |
static <T> Optional<T> ofNullable(T value)
如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。 |
12 |
T orElse(T other)
如果存在该值,返回值, 否则返回 other。 |
13 |
T orElseGet(Supplier<? extends T> other)
如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。 |
14 |
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常 |
15 |
String toString()
返回一个Optional的非空字符串,用来调试 |
注意: 这些方法是从 java.lang.Object 类继承来的。
Optional 实例
我们可以通过以下实例来更好的了解 Optional 类的使用:
Java8Tester.java 文件
执行以上脚本,输出结果为:
$ javac Java8Tester.java $ java Java8Tester 第一个参数值存在: false 第二个参数值存在: true 10
Java 8 新特性001_Java 8 Optional 类相关推荐
- Java8新特性总结 - 2.Optional类
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...
- Java 8新特性:Optional类
Java 8新特性:Optional类 在上一篇介绍Stream流式数据处理的文章中提到了Optional类,这是Java 8新增的一个类,用以解决程序中常见的NullPointerException ...
- Java 8 新特性,Optional介绍 | 春松客服
目录 缘起 Optional类 Optional对象构造方法 提取Optional对象的值 使用orElse()方法获取值 使用filter()方法过滤 示例程序 注意事项 使用场景 orElseGe ...
- Java 16 新特性:record类
以前我们定义类都是用class关键词,但从Java 16开始,我们将多一个关键词record,它也可以用来定义类.record关键词的引入,主要是为了提供一种更为简洁.紧凑的final类的定义方式. ...
- Java 8新特性终极指南
在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Ja ...
- 跟我学 Java 8 新特性之 Stream 流基础体验
转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...
- Java 9 新特性概述
转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...
- Java 8 新特性之Stream API
1. 概述 1.1 简介 Java 8 中有两大最为重要的改革,第一个是 Lambda 表达式,另外一个则是 Stream API(java.util.stream.*). Stream 是 Java ...
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
最新文章
- 自然语言处理-Word2Vec
- string 小知识
- GitHub的这个彩蛋我居然才知道,我OUT了
- 【企业管理】《管理者实践》读书笔记--管理者及其工作
- 论文多次被拒怎么办?Best Paper Award获得者聊聊如何才能中顶会
- 不高兴的津津(信息学奥赛一本通-T1111)
- python 时间_Python-基础-时间日期处理小结
- (39)FPGA面试技能提升篇(nandflash接口)
- iOS开发-View中frame和bounds区别
- 刚装的fedora16测试时出现莫名包
- static 和 const的解释(转载)
- 3300字详解闲鱼上如何找到爆款品类?
- 台式计算机 cpu型号大全,电脑cpu的型号有哪些?
- 广义逆矩阵:加号逆(A+)与减号逆(A-)
- 计算机网络中的ttl怎么理解,Ping值中“TTL”是什么意思,为什么使用“TTL”这个概念?...
- Jpa 注解详解 映射详解 一对多 多对一
- 通过python使用多种方法改变图片尺寸
- ICML 2022|达摩院多模态模型OFA,实现模态、任务和架构三个统一
- (Spring笔记)AspectJ环绕通知——@Around切面开发
- RGB和HSV颜色模型