概要
通常在日常的开发中,总是无法难以避免会出现空指针异常的错误。OPtional类是一个容器类,代表一个值存在或者不存在,避免空指针异常。那么java8中提供了那些常用的API呢?
常用方法 | 说明 |
---|---|
optional.of(T t) | 创建一个基于T的Optional实例 |
optional.empty() | 创建一个空的Optional实例 |
optional.ofNullable(T t) | 若t不为null。创建Optional实例 |
optionl.isPresent() | 判断optional对象是否有值 |
optional.orElse(T t) | 若optional不为空,则返回optional实例子,否则返回T的Optional实例 |
orElseGet(Supplier s) | 若对象包含值,则返回值,否则返回s获取的值 |
map(Function f) | 若有值,返回操作后的Optional实例,否则返回空的Optional实例 |
flatMap(Function mapper) | 与map类似,返回值是Optional |
进行Mybatis查询对象的时候,通过封装查询对象的Optional来减少空指针的异常,是常见的业务处理模式,下面简单演示以下java8提供的Optional类常见的使用API。
代码演示
public class TestOptional {
/**
* 测试OptionalOF的null
*/
@Test
public void testOptionalOF() {
Optional<Employee> optional = Optional.of(null);
// 返回 java.lang.NullPointerException
System.out.println(optional.get());
}
/**
* 测试OptionalEmpty
*/
@Test
public void testOptionalEmpty() {
// 构建空的Optional
Optional<Employee> optional = Optional.empty();
// 返回 java.util.NoSuchElementException: No value present
System.out.println(optional.get());
}
/**
* 测试OptionalOfNull
*/
@Test
public void testNull() {
Optional<Employee> optional = Optional.ofNullable(null);
// 返回 java.util.NoSuchElementException: No value present
System.out.println(optional.get());
}
/**
* 测试OptionalOrelse,map,FlatMap
*/
@Test
public void testOptionalOrElse() {
// 创建空的Optional对象
Optional<Employee> optional = Optional.ofNullable(null);
// 这里因为Optional对象为空,所以将会返回新建的李四对象
Employee employee = optional.orElse(new Employee("李四", 25, 20001D));
// 打印李四的姓名
Optional<String> s = optional.map(Employee::getName);// (e) -> e.getName()
Optional<String> s1 = optional.flatMap((e) -> Optional.of(e.getName()));
System.out.println(s1);
System.out.println(employee);
Employee employee1 = optional.orElseGet(Employee::new);
System.out.println(employee1);
}
}