Optional

Optional

概述
  • Java 8开始引入的Optional类,主要解决的问题是空指针异常(NullPointerException)

使用

of()/ofNullable()
  • of() 和 ofNullable() 方法创建包含值的 Optional。两个方法的不同之处在于如果你把 null 值作为参数传递进去,of() 方法会抛出 NullPointerException,ofNullable()不会
    @Test(expected = NullPointerException.class)
    public void run() {
        User user=null;
        Optional<User> opt = Optional.of(user);
    }
    @Test
    public void run1(){
        String name=null;
        Optional<String> opt=Optional.ofNullable(name);
    }
get()
  • ptional 实例中取回实际值对象的方法之一是使用 get() 方法:
orElse() 和 orElseGet()
  • 在对象为空的时候返回默认值。
  • 如果它们接收的都是函数时,当不为空指针的情况下,orElse()仍会执行,而orElseGet()不会执行,类似懒加载原理。
    @Test
    public void run2(){
        User user=null;
       User user1=new User("langerfei@163.com");
        User result=Optional.ofNullable(user).orElse(user1);
        assertEquals("langerfei@163.com",result.getEmail());
    }

    @Test
    public void run3(){
        User user=null;
        User result=Optional.ofNullable(user).orElseGet(()->createUser());
        assertEquals("15363144@qq.com",result.getEmail());
    }

    @Test
    public void run4(){
        User user1=new User("langerfei@163.com");
        User result=Optional.ofNullable(user1).orElse(user1);
        assertEquals("langerfei@163.com",result.getEmail());

        User result2=Optional.ofNullable(user1).orElseGet(()->createUser());
        assertEquals("15363144@qq.com",result2.getEmail());
    }

    private User createUser(){
        return new User("15363144@qq.com");
    }
原文地址:https://www.cnblogs.com/frankltf/p/10082512.html