我是靠谱客的博主 舒适宝贝,最近开发中收集的这篇文章主要介绍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方法
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,否则将快速失败。

  1. 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实例。

  1. 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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部