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时效果则不一样,具体怎么使用需要看到我们所要实现的功能来判断了。
该文章仅供参考,如有错误或缺漏欢迎各位指点迷津。