背景
在使用Optional判空做后续处理时,有方法orElse()和orElseGet()两种,这两个方法,都会在Optional.ofNullable()为空时返回一个自己的指定值,那此时应该怎么来选择使用这两个方法呢?接下来,就用测试来一探究竟
准备测试
准备一个测试类
public static class Arvin {
public Arvin(String x) {
System.out.println("arvin init..." + x);
}
}
测试用例1 当Optional.ofNullable()不为空时
public static void main(String[] args) {
Arvin x = new Arvin("1");
Optional.ofNullable(x).orElse(new Arvin("2"));
Optional.ofNullable(x).orElseGet(() -> new Arvin("3"));
}
执行结果
/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java
arvin init...1
arvin init...2
测试用例2 当Optional.ofNullable()为空时
public static void main(String[] args) {
Arvin x = null;
Optional.ofNullable(x).orElse(new Arvin("2"));
Optional.ofNullable(x).orElseGet(() -> new Arvin("3"));
}
执行结果
/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java
arvin init...2
arvin init...3
根据执行结果可见,无论Optional.ofNullable()是否为空,orElse()方法都会执行,而orElseGet()只会在Optional.ofNullable()为空时,才会实际去执行
结论
如果大部分场景下,使用Optional.ofNullable()方法为空时,才返回指定对象,使用orElseGet()方法更为合适,orElse()方法,则更适合无论如何都需要执行的场景