Java 8 Optional类源码分析及实现细节是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2289个文字,预计阅读时间需要10分钟。
这是《水煮+JDK+源码》系列的第九篇章节,计划撰写100篇关于JDK源码相关的文章。这些文章将聚焦于java.util包下的Optional类,它自JDK 1.8版本新增。Optional是一个final类,不能被继承,且其构造函数是private的。
这是《水煮 JDK 源码》系列 的第9篇文章,计划撰写100篇关于JDK源码相关的文章
Optional 类位于 java.util 包下,自 JDK 1.8 版本新增的,它是一个 final 类,不能被继承,且构造函数是 private 的,不能被实例化,它提供了一系列对 null 空值的处理方法,是一个包装类,既可以包装非空对象,也可以包装空值,下面来看看它的定义以及默认构造函数。
public final class Optional<T> { private Optional() { this.value = null; } }众所周知,在Java开发过程中,经常需要对 null 进行判断和处理,如果漏掉了,就会引发 NullPointerException 异常,因此 null 判断几乎会遍布在代码的每个角落,那么神奇的 null 是如何诞生的呢?
1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了null引用的想法。ALGOL W是第一批在堆上分配记录的类型语言之一。Hoare选择null引用这种方式,“只是因为这种方法实现起来非常容易”。虽然他的设计初衷就是要“通过编译器的自动检测机制,确保所有使用引用的地方都是绝对安全的”,他还是决定为null引用开个绿灯,因为他认为这是为“不存在的值”建模最容易的方式。
本文共计2289个文字,预计阅读时间需要10分钟。
这是《水煮+JDK+源码》系列的第九篇章节,计划撰写100篇关于JDK源码相关的文章。这些文章将聚焦于java.util包下的Optional类,它自JDK 1.8版本新增。Optional是一个final类,不能被继承,且其构造函数是private的。
这是《水煮 JDK 源码》系列 的第9篇文章,计划撰写100篇关于JDK源码相关的文章
Optional 类位于 java.util 包下,自 JDK 1.8 版本新增的,它是一个 final 类,不能被继承,且构造函数是 private 的,不能被实例化,它提供了一系列对 null 空值的处理方法,是一个包装类,既可以包装非空对象,也可以包装空值,下面来看看它的定义以及默认构造函数。
public final class Optional<T> { private Optional() { this.value = null; } }众所周知,在Java开发过程中,经常需要对 null 进行判断和处理,如果漏掉了,就会引发 NullPointerException 异常,因此 null 判断几乎会遍布在代码的每个角落,那么神奇的 null 是如何诞生的呢?
1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了null引用的想法。ALGOL W是第一批在堆上分配记录的类型语言之一。Hoare选择null引用这种方式,“只是因为这种方法实现起来非常容易”。虽然他的设计初衷就是要“通过编译器的自动检测机制,确保所有使用引用的地方都是绝对安全的”,他还是决定为null引用开个绿灯,因为他认为这是为“不存在的值”建模最容易的方式。

