美文网首页@IT·互联网
Java8 : Optional 解析

Java8 : Optional 解析

作者: 金明浩KS | 来源:发表于2017-05-30 20:51 被阅读0次

自古以来, Java 开发者们都会遇到一个让人又爱又恨的异常: NullPointException, 为了解决这个问题, Java8 中新引入了一个工具叫做 Optional ,是用来存储对象并且去解决空对象问题的包装类, 用以避免产生 Java 中的空指针异常.

属性

private final T value;

Optional 对象中包装着一个泛型方法的对象, 当我们在包装类中存放着对应的方法的时候, 我们可以检验这个值是否存在,并且在适当的时候取出这个值来.

产生对象

    public static <T> Optional<T> of(T value);
    public static <T> Optional<T> ofNullable(T value);

Optional 对象有两个方法:

  • of 方法提供一个构造方法, 会将传入的对象引入 Optional 类的构造方法中, 默认构造方法会在调用时检查对象是否为 null , 如果为空的话,将会抛出一个空指针异常.
  • ofNullable 方法在调用构造器之前会提供一个事前检查,如果传入的对象为空的话,则会自动返回一个空的 Optional 对象,如果传入对象不为空的话,则 返回一个包含着该对象的包装类 .

检查对象

    public boolean isPresent();
    public void ifPresent(Consumer<? super T> consumer);
  • isPresent 方法返回对象是否存在,如果存在则返回 true 否则返回 false
  • ifPresent 方法传入一个消费函数, 当对应的值存在的时候, 则去执行对应的消费函数内容.

获取对象

    public T get();
    public T orElse(T other);
    public T orElseGet(Supplier<? extends T> other);
    public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X;
  • get 方法将会检查包装类的值,如果为空的话则抛出一个 NoSuchElementException 异常. 不为空的话就返回对应的对象内容.
  • orElse 方法和 get 方法一样,会检查内容是否存在并且返回对象,但是有所不同的内容是, 当内容为空的时候将会返回默认的 other 的对象.
  • orElseGet 方法传入一个生产函数,和 orElse 方法类似,当对象内容为空的时候会自动的调用生产函数的内容,并且将函数生成的对象返回给方法.
  • orElseThrow 方法传入一个生产一个继承自 Throwable 的生产函数, 当对象内容为空的时候调用生产函数的方法, 并且将生产出来的 Throwable 对象抛出.

处理对象

    public Optional<T> filter(Predicate<? super T> predicate);
    public<U> Optional<U> map(Function<? super T, ? extends U> mapper);
    public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper);
  • filter 过滤器方法传入一个判断函数, 如果 Optional 对象中不包含任何元素, filter 方法返回一个空的 Optional 对象, 如果调用函数返回一个 false, 则会返回一个空的 Optional 对象, 如果返回 true, 则会得到现在的 Optional 对象.
  • map 方法传入一个 Function 函数, 并且取的其中的内容, 并对内容执行该函数,返回结果放入一个新的 Optional 对象中. 如果原有对象是空的,那么我们将会获得一个空的对象.
  • flatMap 方法也传入一个 Function 函数,但是这个函数是一个 V -> Optional<U> 的函数.它的实现和 map 方法相同.但是返回值是一个 Optional<U> 而不是一个 Optional<Optional<U>>�.

Optional 对象十分适合于包装各种不确定的返回数据. 但是其使用方式不是每次都获取其中的具体内容,或者每次调用 get 或者 isPresent 方法来确认内容是否存在.而是经常调用 filter, map 等方法直接对内容进行操作.直到获得最后的值.
具体的实现非常类似其他函数式编程语言的使用精髓.我们可以从中获取参考.

欢迎关注我的博客: 既然来了就坐坐吧
小站刚开始起步,欢迎您的驾到.

相关文章

  • Java8 : Optional 解析

    自古以来, Java 开发者们都会遇到一个让人又爱又恨的异常: NullPointException, 为了解决这...

  • Optional

    Java8中Optional为util包中一个类 创建Optional对象 Optional.of() 传入对象不...

  • JAVA8新特性-Optional类解决NPE问题

    ** JAVA8新特性-Optional类解决NPE问题** API介绍 1、Optional(T value),...

  • Optional源码分析(未完)

    Optional源码分析(未完) Optional 类是Java8的新特性,Optional是一个可以为null的...

  • Optional类

    Optional类为Java8新引入的一个类,Optional是一个可以为null的容器对象,Optional中的...

  • java8 - optional

    optional 是java8的新特性,The purpose of the class is to provid...

  • 【java8新特性 简述】Optional

    Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引...

  • java8中的函数式编程

    作者:刘仁鹏参考资料: 使用 Java8 Optional 的正确姿势 《Java8函数式编程》Richard W...

  • Java8 Optional

    Java8 新增了 Optional 类,可以更加优雅地解决空指针的问题。 构造器 Optional 的构造器是私...

  • 深入JDK中的Optional

    概述:Optional最早是Google公司Guava中的概念,代表的是可选值。Optional类从Java8版本...

网友评论

    本文标题:Java8 : Optional 解析

    本文链接:https://www.haomeiwen.com/subject/akorfxtx.html