3
如果我從orElse
調用函數,即使Optional
不爲空,該函數也會執行。只有當Optional
爲空時,是否有任何方法限制功能的執行?當Optional不爲空時,如何防止傳遞給Optional的orElse的函數被執行?
Optional.ofNullable(someValue).orElse(someFunction());
如果我從orElse
調用函數,即使Optional
不爲空,該函數也會執行。只有當Optional
爲空時,是否有任何方法限制功能的執行?當Optional不爲空時,如何防止傳遞給Optional的orElse的函數被執行?
Optional.ofNullable(someValue).orElse(someFunction());
someFunction()
被執行,因爲它是傳遞給方法的參數,並在執行方法之前傳遞給方法的參數進行評估。爲避免執行,您應該在Supplier
實例中通過someFunction()
。
使用orElseGet
代替orElse
:
Optional.ofNullable(someValue).orElseGet(SomeClass::someFunction);
或
Optional.ofNullable(someValue).orElseGet(()->someFunction());
使用沒有參數的函數延遲計算喜歡的是有時被稱爲 '咚'。 –