我是靠谱客的博主 舒适宝贝,这篇文章主要介绍Guava 源码解读 -- Optional,现在分享给大家,希望可以做个参考。

在开始之前,我们来探讨一下,Java中的null究竟指什么?

例如,Map.get(key)返回Null时,可能表示map中的值是null,亦或map中没有key对应的值。

Null可以表示失败、成功或几乎任何情况。使用Null以外的特定值,会让你的逻辑描述变得更清晰。

鉴于此,在Guava中的大多数集合类都支持对null的快速失败操作。

为了尽量避免程序中的null值,Guava提供了Optional对数据进行封装。如果值为空则立即抛出异常,并且提供了AbsentPresent两个子类分别表示值缺失值存在的情形,来增强null的语义。

Guava Optional


创建Optional实例

为了创建Optional实例,Google给出了三种方法:

方法语义
Optional.of(T)创建指定引用的Optional实例,若引用为null则快速失败
Optional.absent()创建引用缺失的Optional实例
Optional.fromNullable(T)创建指定引用的Optional实例,若引用为null则表示缺失

下面分别来看看这三种创建实例方法的源码:

  1. of方法
复制代码
1
2
3
4
public static <T> Optional<T> of(T reference) { return new Present<T>(checkNotNull(reference)); }

传入引用后,返回了一个Present实例,并调用checkNotNull方法,在子类Present中如下:

复制代码
1
2
3
4
5
6
7
public static <T> T checkNotNull(@CheckForNull T reference) { if (reference == null) { throw new NullPointerException(); } return reference; }

若引用为null则抛出空指针异常,因此of方法不可以传入null,否则将快速失败。

  1. absent方法
复制代码
1
2
3
4
public static <T> Optional<T> absent() { return Absent.withType(); }
复制代码
1
2
3
4
5
6
7
static final Absent<Object> INSTANCE = new Absent<>(); @SuppressWarnings("unchecked") // implementation is "fully variant" static <T> Optional<T> withType() { return (Optional<T>) INSTANCE; }

创建一个Absent实例。

  1. fullNullable方法
复制代码
1
2
3
4
public static <T> Optional<T> fromNullable(@CheckForNull T nullableReference) { return (nullableReference == null) ? Optional.<T>absent() : new Present<T>(nullableReference); }

该方法传入引用为null时创建Absent实例,否则创建Present实例。

最后

以上就是舒适宝贝最近收集整理的关于Guava 源码解读 -- Optional的全部内容,更多相关Guava内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部