欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Optional

程序员文章站 2022-06-08 13:54:43
...

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("[email protected]");
        User result=Optional.ofNullable(user).orElse(user1);
        assertEquals("[email protected]",result.getEmail());
    }

    @Test
    public void run3(){
        User user=null;
        User result=Optional.ofNullable(user).orElseGet(()->createUser());
        assertEquals("[email protected]",result.getEmail());
    }

    @Test
    public void run4(){
        User user1=new User("[email protected]");
        User result=Optional.ofNullable(user1).orElse(user1);
        assertEquals("[email protected]",result.getEmail());

        User result2=Optional.ofNullable(user1).orElseGet(()->createUser());
        assertEquals("[email protected]",result2.getEmail());
    }

    private User createUser(){
        return new User("[email protected]");
    }