概述
在开始之前,我们来探讨一下,Java中的null究竟指什么?
例如,Map.get(key)返回Null时,可能表示map中的值是null,亦或map中没有key对应的值。
Null可以表示失败、成功或几乎任何情况。使用Null以外的特定值,会让你的逻辑描述变得更清晰。
鉴于此,在Guava中的大多数集合类都支持对null的快速失败操作。
为了尽量避免程序中的null值,Guava提供了Optional对数据进行封装。如果值为空则立即抛出异常,并且提供了Absent和Present两个子类分别表示值缺失和值存在的情形,来增强null的语义。
Guava Optional
创建Optional实例
为了创建Optional实例,Google给出了三种方法:
方法 | 语义 |
---|---|
Optional.of(T) | 创建指定引用的Optional实例,若引用为null则快速失败 |
Optional.absent() | 创建引用缺失的Optional实例 |
Optional.fromNullable(T) | 创建指定引用的Optional实例,若引用为null则表示缺失 |
下面分别来看看这三种创建实例方法的源码:
- of方法
public static <T> Optional<T> of(T reference) {
return new Present<T>(checkNotNull(reference));
}
传入引用后,返回了一个Present实例,并调用checkNotNull方法,在子类Present中如下:
public static <T> T checkNotNull(@CheckForNull T reference) {
if (reference == null) {
throw new NullPointerException();
}
return reference;
}
若引用为null则抛出空指针异常,因此of方法不可以传入null,否则将快速失败。
- absent方法
public static <T> Optional<T> absent() {
return Absent.withType();
}
static final Absent<Object> INSTANCE = new Absent<>();
@SuppressWarnings("unchecked") // implementation is "fully variant"
static <T> Optional<T> withType() {
return (Optional<T>) INSTANCE;
}
创建一个Absent实例。
- fullNullable方法
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 源码解读 -- Optional所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复