【技术累积】【点】【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判断的,迅速执行的;

参考博客

原文地址:https://www.cnblogs.com/andy1202go/p/9674456.html