初识Optional.ofNullable()方法

这篇具有很好参考价值的文章主要介绍了初识Optional.ofNullable()方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、相关方法

​​1、of(T value)  入参必须保证不为null

2、ofNullable(T value)  不确定入参是否为null

3、empty() ,不包含任何入参

4、isPresent()

5、orElse(T other)

6、map(Function mapper)

二、总结       


一、相关方法

        根据官方的说明,Java8推出的Optional 的目的是为了杜绝空指针异常,从而帮助开发者开发出更加优雅的代码。它是一个容器对象,可以包含,也可以不包含非null值。在Java 8 之前,程序员会明确返回null, 现在是Optional。这种变化区别就在于,返回Optional 是明确的声明,返回值中可能没有东西。并且Optional 中有近10种方法,供我们使用和创建Optional类。 

        诚然,官方提供了相关API以及3个静态的方法(以便我们能获取一个Optional): 

​​1、of(T value)  入参必须保证不为null

    /**
     * Returns an {@code Optional} with the specified present non-null value.
     *
     * @param <T> the class of the value
     * @param value the value to be present, which must be non-null
     * @return an {@code Optional} with the value present
     * @throws NullPointerException if value is null
     */
    public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }

     官方的说明很简单,该方式会返回一个具有当前值(即入参中的value)的 Optional,前提是保证入参不能为null,否则会报空指针异常。

2、ofNullable(T value)  不确定入参是否为null

    /**
     * Returns an {@code Optional} describing the specified value, if non-null,
     * otherwise returns an empty {@code Optional}.
     *
     * @param <T> the class of the value
     * @param value the possibly-null value to describe
     * @return an {@code Optional} with a present value if the specified value
     * is non-null, otherwise an empty {@code Optional}
     */
    public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }

        从注释中可以看到,和上面的方法相比,这个方法允许入参为null,它并不会抛出异常。反过来,如果我传入一个null,则会得到:Optional.empty()。

3、empty() ,不包含任何入参

    /**
     * Returns an empty {@code Optional} instance.  No value is present for this
     * Optional.
     *
     * @apiNote Though it may be tempting to do so, avoid testing if an object
     * is empty by comparing with {@code ==} against instances returned by
     * {@code Option.empty()}. There is no guarantee that it is a singleton.
     * Instead, use {@link #isPresent()}.
     *
     * @param <T> Type of the non-existent value
     * @return an empty {@code Optional}
     */
    public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }

        该方法直接返回一个空的optional,即该Optional 中不包含值。

4、isPresent()

    /**
     * Return {@code true} if there is a value present, otherwise {@code false}.
     *
     * @return {@code true} if there is a value present, otherwise {@code false}
     */
    public boolean isPresent() {
        return value != null;
    }

        这个方法翻译过来就是:如果存在值,则返回 true,否则返回 false。

5、orElse(T other)

    /**
     * Return the value if present, otherwise return {@code other}.
     *
     * @param other the value to be returned if there is no value present, may
     * be null
     * @return the value, if present, otherwise {@code other}
     */
    public T orElse(T other) {
        return value != null ? value : other;
    }

        这个方法表示,如果存在(即,Optional 中有值)就将其返回,不存在就返回传入值。

6、map(Function<? super T, ? extends U> mapper)

    /**
     * If a value is present, apply the provided mapping function to it,
     * and if the result is non-null, return an {@code Optional} describing the
     * result.  Otherwise return an empty {@code Optional}.
     *
     * @apiNote This method supports post-processing on optional values, without
     * the need to explicitly check for a return status.  For example, the
     * following code traverses a stream of file names, selects one that has
     * not yet been processed, and then opens that file, returning an
     * {@code Optional<FileInputStream>}:
     *
     * <pre>{@code
     *     Optional<FileInputStream> fis =
     *         names.stream().filter(name -> !isProcessedYet(name))
     *                       .findFirst()
     *                       .map(name -> new FileInputStream(name));
     * }</pre>
     *
     * Here, {@code findFirst} returns an {@code Optional<String>}, and then
     * {@code map} returns an {@code Optional<FileInputStream>} for the desired
     * file if one exists.
     *
     * @param <U> The type of the result of the mapping function
     * @param mapper a mapping function to apply to the value, if present
     * @return an {@code Optional} describing the result of applying a mapping
     * function to the value of this {@code Optional}, if a value is present,
     * otherwise an empty {@code Optional}
     * @throws NullPointerException if the mapping function is null
     */
    public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
            return Optional.ofNullable(mapper.apply(value));
        }
    }

        这个方法的注释好长啊,其实用一句话总结就是:逐层拆解value,解决NPE。文后会附上关于这一块讲的笔记好的博文链接,大家感兴趣可以去研究下窝。

二、总结       

        引用官方的说明,来总结下Optional:

        Optional对象是一种包装器对象,被当作一种更安全的方式,用来替代类型T的引用,用以解决空指值异常所带来的问题。

        附上前文提到的关于这块写的比较好的一篇博文:

Java8 Optional - 知乎烦人的空指针请大家赏析下面这段代码: public class NullPointerTest { /** * 需求:根据用户名查找该用户所在的部门名称 * * @param args */ public static void main(String[] args) { String departmentNameOf…https://zhuanlan.zhihu.com/p/338128121       

        谢谢大家!文章来源地址https://www.toymoban.com/news/detail-679326.html

到了这里,关于初识Optional.ofNullable()方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Optional 类 - Java 8

    2023年04月18日
    浏览(37)
  • Java Optional

    Optional 是 Java 8 中引入的一个类,用于处理可能为空的值。它提供了一种优雅的方式来避免空指针异常,并在值存在时进行处理。下面是一些 Optional 的常用方法: 创建 Optional 对象: Optional.empty() : 创建一个空的 Optional 对象。 Optional.of(value) : 创建一个包含指定非空值的 Optio

    2024年02月07日
    浏览(38)
  • Java新特性:Optional类

    Java新特性:Optional类 Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。 Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代

    2024年02月16日
    浏览(43)
  • Boost开发指南-4.3optional

    在实际的软件开发过程中我们经常会遇到“无效值”的情况,例如函数并不是总能返回有效值,很多时候函数正确执行了,但结果却不是合理的值。如果用数学语言来解释,就是返回值位于函数解空间之外。 求一个数的倒数,在实数域内开平方,在字符串中查找子串,它们都

    2024年02月13日
    浏览(39)
  • 在Java中正确使用Optional

    Optional类是在Java 8中引入的,用于解决NullPointerException的问题。 java.util.Optional类是一个泛型类型的类,只包含一个类型为T的值。其目的是提供对可能为null的类型T的引用对象的更安全的替代方案。但是,只有在正确使用的情况下,Optional对象才是安全的。 创建Optional对象的方式

    2024年01月16日
    浏览(38)
  • 【Java基础教程】(三十一)常用类库篇 · 第一讲:Optional类——解锁Java的Optional操作,消灭那些隐匿的空指针,还程序世界一个安稳!~

    Optional 类是Java 8引入的新特性,旨在解决空值( null )的处理问题 。它的设计目的是为了提供一种更好的方式来处理可能为空的值,避免使用 null 导致空指针异常。 Optional 是一个容器对象,可以持有某个类型的非空值或者空值。它是一个包装类,用于替代可能为空的引用变

    2024年02月15日
    浏览(45)
  • 详细分析Java中的Optional类以及应用场景

    在实战中学习,灵活运用每个操作类,具体如下: 源码主要如下: 大致含义如下: 这是一个容器对象,可能包含或不包含非空值。如果有值存在,isPresent() 方法将返回 true,而 get() 方法将返回该值。 提供了一些依赖于包含值的存在或缺失的其他方法,例如 orElse()(如果值不

    2024年04月27日
    浏览(45)
  • Java8新特性:Optional类(超详解)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 到目前为止,臭名昭著的 空指针异常 是导致Java应用程序失败的最常见原因。以前,为了解决空指

    2023年04月09日
    浏览(42)
  • Lambda表达式与“::“方法引用 & 判空包装类Optional

    函数式接口(Functional Interface)就是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为Lambda表达式。 方法引用主要是对Lambda表达式的一种优化! 方法引用的使用前提是对象和方法都是已经存在的! 方法引用提供了一种引用而不执行方

    2024年02月06日
    浏览(39)
  • Optional常用方法实例, 源码挺简单的,重要的是option 与 stream 以及lambda 的连贯使用

    ​empty(): ​of() // 非null 就继续执行 否则抛异常 ​ ofNullable () ​get() //非null就get 否则异常 ​//lambada // 根据是否为NULL进行操作 ​// filter进行以上对下进行输入 如果opt是一集合的话 , 无法进行筛选 , 只能使用集合本身进行filter 取到map orElseThrow() //是空就抛出自定义异常

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包