快速入门 java8-Optional类学习

概要

通常在日常的开发中,总是无法难以避免会出现空指针异常的错误。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);
    }
}

你可能感兴趣的:(Java基础)