您当前的位置: 首页 >  Java

Charge8

暂无认证

  • 6浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java8/9 Optional使用

Charge8 发布时间:2021-11-10 22:24:15 ,浏览量:6

Java8 引入的 Optional类。主要用来解决空指针异常(NullPointerException),空指针异常是导致Java应用程序失败的最常见原因。

Optional类可以理解为一个容器:它既可以保存类型T的对象,也可以保存null。

Optional类提供了很多有用的方法,并实现了检查空值的功能,程序员就不用显式地写空值检测的代码,再结合函数式编程,使得代码更加干净,简洁。

一、Optional类的使用

在这里插入图片描述

1、创建 Optional实例

Optional类可以理解为一个容器:它既可以保存类型 T的对象,也可以保存 null。

1.1 of方法

of:为非null的值创建一个optional,如果传入为null,则会空指针。

    @Test
    public void testOf(){
        JUser jUser = new JUser();
        jUser.setId(100L);
        jUser.setUsername("赵云");
        jUser.setPazzword("abc123");
        jUser.setHeight(1.78D);
        jUser.setBirthday(new Date());
        jUser.setStatus(JUserStatusEnum.ACTIVATE);

        Optional optionalJUser = Optional.of(jUser);
        System.out.println(optionalJUser.get()); // 输出结果:jUser信息

        jUser = null;
        Optional optionalJUser2 = Optional.of(jUser);
        System.out.println(optionalJUser2.get()); // 输出结果:java.lang.NullPointerException
    }
1.2 ofNullable方法

ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。

    @Test
    public void testOfNullable(){
        JUser jUser =  null;
        Optional optionalJUser = Optional.ofNullable(jUser);
        System.out.println(optionalJUser); // 输出结果:Optional.empty

        JUser jUser1 = optionalJUser.get();// 输出结果:在这一行报错啦,java.lang.NullPointerException: No value present
    }
1.3 empty方法

empty:返回一个空 Optional实例。

注意: Optional.empty() 所有保存 null包装成的 Optional对象,而且是单例模式的。与泛型无关。

    @Test
    public void testEmpty(){
        Optional empty = Optional.empty();
        System.out.println(empty); // 输出结果:Optional.empty
        
        Object o1 = Optional.empty();
        Object o2 = Optional.empty();
        System.out.println(o1 == o2);// 输出结果:true
    }
2、验证 Optional实例 2.1 isPrensent方法

isPrensent:如果值存在返回true,不存在返回false。

    @Test
    public void testIsPresent(){
        JUser jUser =  null;
        Optional optionalJUser = Optional.ofNullable(jUser);
        boolean present = optionalJUser.isPresent();
        System.out.println(present); // 输出结果:false
    }
2.2 ifPresent方法

ifPresent:接受一个Consumer参数,如果对象不为空,就调用consumer接口。否则不做处理。

    @Test
    public void testIfPresent(){
        JUser jUser = new JUser();
        jUser.setId(100L);
        jUser.setUsername("赵云");
        jUser.setPazzword("abc123");
        jUser.setHeight(1.78D);
        Optional optionalJUser = Optional.ofNullable(jUser);
        optionalJUser.ifPresent(u -> {
            // 不为 null时才会执行断言
            System.out.println(u);// 输出结果:jUser信息
        });
    }
3、Optional实例使用 3.1 get方法

get:如果有值则返回,没有值抛出 NoSuchElementException异常

    @Test
    public void testGet(){
        JUser jUser =  null;
        Optional optionalJUser = Optional.ofNullable(jUser);
//        JUser jUser1 = optionalJUser.get(); // 输出结果:java.lang.NullPointerException

        // 可以使用 isPresent方法检查
        if(optionalJUser.isPresent()){
            System.out.println(optionalJUser.get());// 输出结果:此时为空,不执行该语句
        }
    }
3.2 orElse(方法

orElse(T other):如果保存的值不是null,则返回原来的值,否则返回 other。

    @Test
    public void testOrElse(){
        JUser jUser =  null;
        Optional optionalJUser = Optional.ofNullable(jUser);

        JUser jUser1 = optionalJUser.orElse(new JUser());
        System.out.println(jUser1);// 输出结果:jUser实例的默认信息
        // JUser{id=null, username='null', pazzword='null', age=null, age2=0, sex=null, height=null, height2=0.0, birthday=null, status=null}
    }
3.3 orElseGet方法

orElseGet(Supplier

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0401s