当Optional不为空时,如何防止传递给Optional的orElse的函数被执行?
How to prevent the function passed to Optional's orElse from being executed when the Optional is not empty?
如果我从 orElse
调用一个函数,即使 Optional
不为空,该函数也会执行。有什么方法可以限制函数的执行仅在 Optional
为空时执行?
Optional.ofNullable(someValue).orElse(someFunction());
someFunction()
被执行,因为它是传递给方法的参数,并且传递给方法的参数在执行方法之前被评估。为避免执行,您应该在 Supplier
实例中传递 someFunction()
。
使用orElseGet
代替orElse
:
Optional.ofNullable(someValue).orElseGet(SomeClass::someFunction);
或
Optional.ofNullable(someValue).orElseGet(()->someFunction());
如果我从 orElse
调用一个函数,即使 Optional
不为空,该函数也会执行。有什么方法可以限制函数的执行仅在 Optional
为空时执行?
Optional.ofNullable(someValue).orElse(someFunction());
someFunction()
被执行,因为它是传递给方法的参数,并且传递给方法的参数在执行方法之前被评估。为避免执行,您应该在 Supplier
实例中传递 someFunction()
。
使用orElseGet
代替orElse
:
Optional.ofNullable(someValue).orElseGet(SomeClass::someFunction);
或
Optional.ofNullable(someValue).orElseGet(()->someFunction());