介绍
Optional是Java 8中引入的一个包装类,用于解决NullPointerException异常问题,提供了一种优雅的方式来处理值不存在的情况。
使用场景
- 避免空指针异常:在可能出现null值的情况下,使用Optional可以避免空指针异常的出现。
- 提高代码的可读性:使用Optional可以更加清晰地表达代码的意图。
- 链式调用:在多个方法调用中,使用Optional可以避免繁琐的判空操作,使代码更加简洁易懂。
- 简化代码逻辑:使用Optional可以避免复杂的if-else语句,使代码更加简洁易读。
原则
- 返回值永远不为null(比如异常)
- 如果值存在,isPresent()方法返回true,get()方法将返回该值。
- 如果值不存在,isPresent()方法返回false,get()方法将抛出NoSuchElementException异常。
原理
Optional类是一个final类,可以用来表示一个值存在或不存在,而不用显式地检查null。Optional可以通过工厂方法empty()创建一个空的Optional,或者通过工厂方法of()创建一个非空的Optional。
语法和API
创建
- empty()
创建一个空的Optional对象 - of()
创建一个包含非null值的Optional实例 - 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。 |
特点
- Optional对象中包含一个value属性,可以通过get()方法获取该属性值,但是如果该Optional对象表示的是一个空值,则会抛出NoSuchElementException异常。
- Optional类中还包含了很多其他方法,如isPresent()、orElse()、orElseGet()、orElseThrow()等,用于方便地处理Optional对象。
注意事项(*
重点)
- Optional类虽然可以用来避免NullPointerException异常,但并不是所有情况都适合使用Optional,需要根据具体场景进行判断。
- 使用Optional时需要注意避免多次调用get()方法,以免重复计算。建议使用orElse()、orElseGet()等方法来获取Optional对象中的值。