Optional

Optional

介绍

Optional是Java 8中引入的一个包装类,用于解决NullPointerException异常问题,提供了一种优雅的方式来处理值不存在的情况。

使用场景

  1. 避免空指针异常:在可能出现null值的情况下,使用Optional可以避免空指针异常的出现。
  2. 提高代码的可读性:使用Optional可以更加清晰地表达代码的意图。
  3. 链式调用:在多个方法调用中,使用Optional可以避免繁琐的判空操作,使代码更加简洁易懂。
  4. 简化代码逻辑:使用Optional可以避免复杂的if-else语句,使代码更加简洁易读。

原则

  • 返回值永远不为null(比如异常)
  • 如果值存在,isPresent()方法返回true,get()方法将返回该值。
  • 如果值不存在,isPresent()方法返回false,get()方法将抛出NoSuchElementException异常。

原理

Optional类是一个final类,可以用来表示一个值存在或不存在,而不用显式地检查null。Optional可以通过工厂方法empty()创建一个空的Optional,或者通过工厂方法of()创建一个非空的Optional。

语法和API

创建

  1. empty()
    创建一个空的Optional对象
  2. of()
    创建一个包含非null值的Optional实例
  3. ofNullable()
    创建一个可以包含null值的Optional实例。

API

方法 描述 返回类型
isPresent 判断Optional对象是否存在值 boolean
get 获取 Optional 实例中的值,如果值不存在则抛出NoSuchElementException异常。因此,get 方法常与 isPresent 方法一起使用。 T
ifPresent 如果 Optional 实例中存在值,则执行指定的操作(使用该值调用指定的消费者),否则什么也不做。 void
orElse 如果 Optional 实例存在值,则返回对应的值,否则返回指定的默认值 T
orElseGet 如果 Optional 实例存在值,则返回相应的值,否则执行指定的Supplier函数并返回其结果 T
orElseThrow 如果 Optional 实例中不存在值,则抛出指定的异常。 X
map 如果存在一个值,则将提供的映射函数应用于它,如果结果为非空,则返回一个描述结果的 Optional。否则返回一个空的 Optional。

特点

  1. Optional对象中包含一个value属性,可以通过get()方法获取该属性值,但是如果该Optional对象表示的是一个空值,则会抛出NoSuchElementException异常。
  2. Optional类中还包含了很多其他方法,如isPresent()、orElse()、orElseGet()、orElseThrow()等,用于方便地处理Optional对象。

注意事项(*重点)

  1. Optional类虽然可以用来避免NullPointerException异常,但并不是所有情况都适合使用Optional,需要根据具体场景进行判断。
  2. 使用Optional时需要注意避免多次调用get()方法,以免重复计算。建议使用orElse()、orElseGet()等方法来获取Optional对象中的值。