1 导读NullPointerException在开发过程中经常遇到,稍有不慎小BUG就出现了,如果避免这个问题呢 , Optional就是专门解决这个问题的类,那么Optional如何使用呢?让我们一起探索一下吧!
2 源码解析2.1 Optional定义Optional类是Java8为了解决null值判断问题而创建的容器类,在java.util 下,使用Optional类可以避免显式的null值判断 , 避免null导致的NullPointerException 。首先,Optional是一个容器,它可以保存类型T的值 , 也可以为null的容器对象 。Optional容器只能存一个值 。
2.2 Optional的属性1)源码:
/*** Common instance for {@code empty()}.*/private static final Optional<?> EMPTY = new Optional<>();/*** If non-null, the value; if null, indicates no value is present*/private final T value;
2.3 Optional的方法Optional除toString()、hashCode() 、equals()等Object的方法外,还包含以下方法 。
2.3.1 私有构造方法
/*** Constructs an empty instance.** @implNote Generally only one empty instance, {@link Optional#EMPTY},* should exist per VM.*/private Optional() {this.value = https://www.huyubaike.com/biancheng/null;}/*** Constructs an instance with the value present.** @param value the non-null value to be present* @throws NullPointerException if value is null*/private Optional(T value) {this.value = https://www.huyubaike.com/biancheng/Objects.requireNonNull(value);}
2.3.2 创建方法1)源码
public static<T> Optional<T> empty() {@SuppressWarnings("unchecked")Optional<T> t = (Optional<T>) EMPTY;return t;}public static <T> Optional<T> of(T value) {return new Optional<>(value);}public static <T> Optional<T> ofNullable(T value) {return value =https://www.huyubaike.com/biancheng/= null ? empty() : of(value);}
- empty(): 创建一个空的 Optional 实例
- of(T t) : 创建一个 Optional 实例,当 t为null时抛出异常
- ofNullable(T t): 创建一个 Optional 实例,但当 t为null时不会抛出异常,而是返回一个空的实例
public static void main(String[] args) {Integer value1 = null;Integer value2 = 1;try {Optional<Integer> optional1 = Optional.empty();System.out.println("optional1创建了");}catch (Exception e){System.out.println("optional1失败了");}try {Optional<Integer> optional2 = Optional.of(value1);System.out.println("optional2创建了");}catch (Exception e){System.out.println("optional2失败了");}try {Optional<Integer> optional3 = Optional.ofNullable(value1);System.out.println("optional3创建了");}catch (Exception e){System.out.println("optional3失败了");}try {Optional<Integer> optional4 = Optional.of(value2);System.out.println("optional4创建了");}catch (Exception e){System.out.println("optional4失败了");}try {Optional<Integer> optional5 = Optional.ofNullable(value2);System.out.println("optional5创建了");}catch (Exception e){System.out.println("optional5失败了");}}
推荐阅读
- Go 源码解读|如何用好 errors 库的 errors.Is 与 errors.As() 方法
- Optional 常用方法总结
- 92年属猴人注定的婚姻解析,要注意什么
- 手相女右手解析 教你如何看懂女人的手相
- 四种假断掌图片 手掌纹路帮解析
- 专家解析 耳再造手术大概多少钱
- 手相女右手解析什么是岛纹,跟纹路形状有关,会有一些不利影响
- 哈尔的移动城堡解析影评 哈尔的移动城堡解析?
- 住房贷款专项扣除标准是多少?住房贷款专项扣除全解析来了
- 主板的南北桥解析知识
