JDK1.8 Optional类取值方法orElse与orElseGet方法比较

Tip:如果最近JDK1.8相关文章被关注程度足够的话我到后续会发布我所了解的1.8的所有内容,如有需要的话可以提前关注点赞一波,留下足迹,方便之后的阅读。

上篇文章讲述了JDK1.8的一个新的工具类StringJoiner,目前阅读量已经快要五百了,而且还有了几个赞,对我一个知乎发文的新人来讲还是感觉挺有激励作用的。今天再来简单说一个JDK1.8的另外一个工具类Optional,这个类的作用是减少空指针异常的发生情况的(虽然我是从来没在实际开发中用过了),下面先来简单说下这个类的基本操作再来说这两个方法的具体区别。
在这里插入图片描述
如上图可见该类是一个泛型类,我们需要在定义时指定好该类的泛型获取的时候就会获取到相对于的类型了。我们在使用时往这个类里塞入内容需要调用该类的方法,具体有两个方法,分别是of、ofNullable(第一个方法参数为null时会报异常,第二个不会)

取值方法有多个,此处重点说三个方法,分别是get、orElse、orElseGet(第一个依然会报异常,第二第三个不会),说法见下图JDK帮助文档。
在这里插入图片描述
然后这里我依然是写了个junit试了一下,先放上代码

@Test
public void test10() {
    // 获取控制台输入内容
    Scanner scanner = new Scanner(System.in);
    String str1 = scanner.next();
    // 输入值如果是字符串null则设置字符串为null
    if (Objects.equals(str1, "null")) {
        str1 = null;
    }
    System.out.println("---orElse---");
    System.out.println(Optional.ofNullable(str1).orElse(test0()));
    System.out.println("---orElseGet---");
    System.out.println(Optional.ofNullable(str1).orElseGet(this::test0));
}
public String test0() {
    System.out.println("test0");
    return "123";
}

然后测试一下这个程序打印内容,先输入一个abc,返回:
在这里插入图片描述
这次输入null试一下:
在这里插入图片描述
可以见到,当我们输入值不为空时orElse还是走了test0方法并且打印了内容,只是没有拿返回值而已,orElseGet则没有进去,而是直接输出了我们的输入内容,当输入值为空时两个方法都会进入test0方法并且获取到返回值。由此可见当Optional内容为null的时候调用orElse、orElseGet这两个方法效果是相同的,而不为null时效果则不一样,具体怎么使用需要看到我们所要实现的功能来判断了。

该文章仅供参考,如有错误或缺漏欢迎各位指点迷津。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值