這兩個函數的字面區別相比大家都比較熟悉沒有必要介紹,其他很多文檔都介紹了。
當返回值不存在的時候,兩個函數卻別不大。但是不存在的時候是有一定區別的。就是orElseGet方法不會執行,因爲他使用的Supplier函數接口。
既然orElseGet有這個有點是不是可以全部使用orElseGet替換orElse呢?不是的。
當值是函數或者需要計算時建議使用orElseGet,當值是基礎類型值時就用orElse。
例如:
// 使用orElse的情形,數值,字符串,引用
orElse(0)
orElse("unKnown");
orElse(ref);
// 使用orElseGet函數調用
orElseGet(Collections.emptyMap);
orElseGet(Collections.emptyList);
orElseGet(RandomUtils::nextInt)