zoukankan      html  css  js  c++  java
  • 【技术累积】【点】【java】【9】Optional

    基础概念

    • java8引入的,java9有加强
    • Google公司出品
    • 旨在更好的处理NullPointException

    创建Optional实例和基础使用

    Optional op1 = Optional.ofNullable(entity);
    Optional op2 = Optional.of(entity);
    Optional op3 = Optional.empty();
    

    三种创建方式,要求不能为空、都可以、empty类型的;

    基本使用:

    op1.get(); //拿到其中的元素
    op1.isPresent(); //判断其中非空
    

    既然是对付空指针的,就要有判空的能力。

    其他还有

    orElse()
    orElseGet()
    orElseThrow()
    filter()
    map()
    flatMap()
    ifPresent()
    

    具体的参考下面博客链接吧,自己用用就熟悉了,何况从字面也能猜个7788

    更加正确的使用方式

    一句话:正确场景+链式调用

    直白的讲, 当我们还在以如下几种方式使用 Optional 时, 就得开始检视自己了

    • 调用 isPresent() 方法时
    • 调用 get() 方法时
    • Optional 类型作为类/实例属性时
    • Optional 类型作为方法参数时

    给出逐渐变化的例子如下:

    public static String getName(User u) {
        if (u == null)
            return "Unknown";
        return u.name;
    }
    
    public static String getName(User u) {
        Optional<User> user = Optional.ofNullable(u);
        if (!user.isPresent())
            return "Unknown";
        return user.get().name;
    }
    
    public static String getName(User u) {
        return Optional.ofNullable(u)
                        .map(user->user.name)
                        .orElse("Unknown");
    }
    

    所以,适用场景也比较明显了,我觉得有两种:

    • 多个null判断的,多层嵌套的;
    • 单一null判断的,迅速执行的;

    参考博客

  • 相关阅读:
    分页插件PageHelper
    持久层的具体实现
    SSM框架搭建
    mysql库中建立存储过程
    安装python2.7
    Spark应用程序第三方jar文件依赖解决方案
    spark2.0.1源码编译
    Hadoop2.7.3源码编译
    Hadoop2.x伪分布式环境搭建(一)
    Linux基础环境的各项配置(三)
  • 原文地址:https://www.cnblogs.com/andy1202go/p/9674456.html
Copyright © 2011-2022 走看看