基础概念
- java8引入的,java9有增强
- Google公司出品
- 旨在更好的处理NullPointException
建立Optional实例和基础使用
Optional op1 = Optional.ofNullable(entity); Optional op2 = Optional.of(entity); Optional op3 = Optional.empty();
三种建立方式,要求不能为空、均可以、empty类型的;html
基本使用:java
op1.get(); //拿到其中的元素 op1.isPresent(); //判断其中非空
既然是对付空指针的,就要有判空的能力。学习
其余还有url
orElse() orElseGet() orElseThrow() filter() map() flatMap() ifPresent()
具体的参考下面博客连接吧,本身用用就熟悉了,况且从字面也能猜个7788spa
更加正确的使用方式
一句话:正确场景+链式调用.net
直白的讲, 当咱们还在以以下几种方式使用 Optional 时, 就得开始检视本身了指针
- 调用 isPresent() 方法时
- 调用 get() 方法时
- Optional 类型做为类/实例属性时
- Optional 类型做为方法参数时
给出逐渐变化的例子以下:code
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"); }
因此,适用场景也比较明显了,我以为有两种:htm
- 多个null判断的,多层嵌套的;
- 单一null判断的,迅速执行的;