空指针是我们最常见也最讨厌的异常,
为了防止空指针异常,
你不得在代码里写大量的非空
判断。
Java 8
引入了一个新的
Optional
类。用于避免空指针的出现,也无需在写大量的
if(obj!=null)
这样的判断了,
前提是你得将数据用
Optional
装着,
它就是一个包裹着对象
的容器。
创建
Optional
对象
of()
为非
null
的值创建一个
Optional
。
of
方法通过工厂方法创建
Optional
类。
需要注意的是,
创建对象时传入的参数不能为
null
。
如果传入参数为
null
,则抛出
NullPointerException
。
//
调用工厂方法创建
Optional
实例
Optional name = Optional.of("Sanaulla");
//
传入参数为
null
,抛出
NullPointerException.
OptionalsomeNull = Optional.of(null);
ofNullable()
为指定的值创建一个
Optional
,如果指定的值为
null
,则返回一个空的
(empty)Optional
。
ofNullable
与
of
方法相似,唯一的区别是可以接受参数为
null
的情况。示例如下:
//
下面创建了一个不包含任何值的
Optional
实例
Optional empty = Optional.ofNullable(null);
常用
api
解释:
isPresent()
如果存在值就返回
true
,否则返回
false
。
if (name.isPresent()) {
//
在
Optional
实例内调用
get()
返回已存在的值
System.out.println(name.get());//
输出
Sanaulla
}
get()
获取其中的数据
如果
Optional
中有值则将其返回,否则抛出
NoSuchElementException
。
ifPresent(consumer)
如果
Optional
实例有值则调用
consumer
,否则不做处理
要理解
ifPresent
方法,首先需要了解
Consumer
类。简答地说,
Consumer
类包含一个抽象
方法。该抽象方法对传入的值进行处理,但没有返回值。
name.ifPresent((value) -> {
System.out.println("The length of the value is: " + value.length());
});
orElse()
如果有值则将其返回,否则返回指定的默认值。
如果
Optional
实例有值则将其返回,否则返回
orElse
方法传入的参数。
empty.getElse("default");
orElseGet()