一、概述
Java8 引入 Optional 的目的是解决 NPE 问题,即 NullPointerExceptions ,空指针异常。
Optional 实际上是个容器:它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 在源码中的声明
public final class Optional<T> {}
二、常用方法
序号 | 方法 | 描述 |
---|---|---|
1 | T get() | 如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException |
2 | boolean isPresent() | 如果值存在则方法会返回true,否则返回 false |
3 | void ifPresent(Consumer<? super T> consumer) | 如果值存在则使用该值调用 consumer , 否则不做任何事情 |
4 | static Optional of(T value) | 返回一个指定非null值的Optional |
5 | static Optional ofNullable(T value) | 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional |
6 | T orElse(T other) | 如果存在该值,返回值, 否则返回 other |
三、常用方法举例
package com.wxw.multiThread;
import java.util.Optional;
public class ThreadTest {
public static void main(String args[]){
ThreadTest java8Tester = new ThreadTest();
Integer value1 = null;
Integer value2 = new Integer(10);
// Optional.ofNullable - 允许传递为 null 参数
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b){
// Optional.isPresent - 判断值是否存在
System.out.println("第一个参数值存在: " + a.isPresent());
System.out.println("第二个参数值存在: " + b.isPresent());
// Optional.orElse - 如果值存在,返回它,否则返回默认值
Integer value1 = a.orElse(new Integer(0));
//Optional.get - 获取值,值需要存在
Integer value2 = b.get();
return value1 + value2;
}
}
ifPresent(Consumer consumer)
ifPresent(Consumer consumer):如果option对象保存的值不是null,则调用consumer对象,否则不调用
Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);
// 如果不是null,调用Consumer
optional1.ifPresent(new Consumer<Integer>() {
@Override
public void accept(Integer t) {
System.out.println("valueOfOptional1 is " + t);
}
});
// null,不调用Consumer
optional2.ifPresent(new Consumer<Integer>() {
@Override
public void accept(Integer t) {
System.out.println("valueOfOptional2 is " + t);
}
});
orElse(value)
如果optional对象保存的值不是null,则返回原来的值,否则返回value
Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);
// optional1对象保存的值不是null,则返回原来的值,即返回1
System.out.println(optional1.orElse(1000) == 1);// true
// optional2对象保存的值是null,返回value,即返回1000
System.out.println(optional2.orElse(1000) == 1000);// true