Java8非空判断之Optional

一、对单体对象非空判断 ifPresent() 示例如下:

DtoClass dtoClass = new DtoClass("狗子", null, null);
Optional.ofNullable(dtoClass).ifPresent(dto ->{
    System.out.println("不为空才执行:"+dto.getName());
});

 测试结果:
Java8非空判断之Optional

 如果 dtoClass 参数为空,则不会输出

二、orElse() 和 orElseGet()
示例1 Optional.ofNullable() 的参数不为空:

    public static DtoClass createDto(String source){
        System.out.println("我被"+source+"调用了");
        return new DtoClass();
    }

    public static void main(String[] args) {
        DtoClass dtoClass = new DtoClass("狗子", null, null);
        String orElseRes = Optional.ofNullable(dtoClass).orElse(createDto("orElse")).getName();
        System.out.println("orElseRes = " + orElseRes);

        String orElseGetRes = Optional.ofNullable(dtoClass).orElseGet(() -> createDto("orElseGet")).getName();
        System.out.println("orElseGetRes = " + orElseGetRes);
    }

输出:
Java8非空判断之Optional

 

示例2 Optional.ofNullable() 的参数为空:

    public static DtoClass createDto(String source){
        System.out.println("我被"+source+"调用了");
        return new DtoClass();
    }

    public static void main(String[] args) {
        DtoClass dtoClass = new DtoClass("狗子", null, null);
        dtoClass = null;
        String orElseRes = Optional.ofNullable(dtoClass).orElse(createDto("orElse")).getName();
        System.out.println("orElseRes = " + orElseRes);

        String orElseGetRes = Optional.ofNullable(dtoClass).orElseGet(() -> createDto("orElseGet")).getName();
        System.out.println("orElseGetRes = " + orElseGetRes);
    }

输出
Java8非空判断之Optional
 

 小结:
1、从结果来看,orElse() 和 orElseGet() 的作用是一样的,都是当前置参数为空的情况下会调用此两者方法
2、区别在于无论前置参数是否为空都会执行 orElse(),只有前置参数为空才会执行行 orElseGet()
3、此二者传参写法略有不同,orElseGet() 需要传入匿名函数生产实例对象,推荐使用 orElseGet()

三、orElseThrow() 前置参数为空排出异常

        DtoClass dtoClass = new DtoClass("狗子", null, null);
        String name1 = Optional.ofNullable(dtoClass).orElseThrow(() -> new BizException("不能为空")).getName();
        System.out.println("条件不为空 = " + name1);

        dtoClass = null;
        String name2 = Optional.ofNullable(dtoClass).orElseThrow(() -> new BizException("不能为空")).getName();
        System.out.println("条件为空 = " + name2);

输出:
Java8非空判断之Optional 

 

 

上一篇:Java8基础(1):接口中的default和static方法


下一篇:Java8新特性