Java中Optional类及orElse方法详解
引言
为了让我更快的熟悉代码,前段时间组长交代了一个小任务,大致就是让我整理一下某个模块中涉及的 sql,也是方便我有目的的看代码,也是以后方便他们查问题(因为这个模块,涉及的判断很多,所以之前如果 sql 出错了,查问题比较繁琐)。
昨天算是基本完成了,然后今天组长就让给我看一个该模块的缺陷,由于刚对该模块进行过整理,所以还算清晰......看代码过程中,看到一些地方进行判空时都用到了 orElse() 方法,之前没怎么用过,熟悉一下......
Java 中的 Optional 类
Optional 类是 Java8 为了解决 NULL 值判断等问题提出的。使用 Optional 类可以避免显式的判断 NULL 值(NULL 的防御性检查),避免某一处因为出现 NULL 而导致的 NPE(NullPointerException)。
ofNullable() 方法
从源码中可以看出来,ofNullable() 方法做了 NULL 值判断,所以我们可以直接调用该方法进行 NULL 值判断,而不用自己手写 NULL 值判断。
orElse() 方法
从源码中可以看出,调用 orElse() 方法时,当值为 NULL 值,返回的是该方法的参数;当值不为 NULL 时,返回值本身。
案例
上述案例中,如果 ofNullable() 方法执行结果不为 NULL,则返回 scRespDTO.getMsgBody().getSuccess() 的值;
如果 ofNullable() 方法的执行结果是 NULL,则返回 false,即,orElse() 方法的参数。
orElseGet() 方法
从源码中可以看出来,调用 orElseGet() 方法时,如果值为 NULL,返回的是实现了 Supplier 接口的对象的 get() 值;
如果值不为 NULL,则返回值本身。
案例
orElseGet() 可以传入一个supplier接口,里面可以花样实现逻辑。
上述案例中,第一句,ofNullable() 不为 NULL,就输出"努力成为一名更优秀的程序媛",反之,则输出"你不够优秀";
第二句,ofNullable() 为 NULL, 输出 "你没有努力"。
orElse() 与 orElseGet() 之间的区别
注意
orElse() 与 orElseGet() 两者之间是 有区别 的。虽然当值为 NULL 时,orElse() 与 orElseGet() 都是返回方法的参数,但区别就是:orElse() 方法返回的是参数本身,而 orElseGet() 方法并不是直接返回参数本身,而是返回 参数的 get() 值,且 该参数对象必须实现 Supplier 接口(该接口为函数式接口)。这就使得 orElseGet() 方法更加灵活。
简单做了一下 Java 中 Optional 类以及其中的 orElse() 方法 与 orElseGet() 方法相关的内容,以前没有了解过。文中显然引入了许多源码,也是为了方便理解不是? :)
以上就是Java中Optional类及orElse()方法详解的详细内容,更多关于Java Optional类 orElse()方法的资料请关注编程学习网其它相关文章!