iT邦幫忙

0

java8 Optional 使用疑問 !=null卻仍執行orElse(已自己解決)

//方法一 get!=null仍不斷跑進orElse造成資料庫重複資料初始化

DialogSetting entity =
Optional.ofNullable(dialogSettingDao.get(platformId))
                .orElse(initAndSaveEntity(platformId));
//方法二 運行正常不會進入到orElseGet

DialogSetting entity =  
Optional.ofNullable(dialogSettingDao.get(platformId)).orElseGet(() -> {
    DialogSetting temp = initAndSaveEntity(platformId);
    return temp;
});
**

照理說這兩段代碼應該是一樣的
資料庫取出也不爲null
但第一種寫法卻不斷跑進 orElse

即使我用debug或直接印出確認爲false仍跑進Else

DialogSetting tmp=dialogSettingDao.get(platformId);
System.out.println(new Boolean(tmp==null).toStirng);//false

再麻煩各位高手了,不知道是踩了個什麼坑

theRookie iT邦新手 3 級 ‧ 2020-08-05 16:51:07 檢舉
搞了個半天

在Optional中不為null時,orElse()的參數若為new一個新的物件則該仍會初始化,而orElseGet()不會執行Supplier.get()

調用orElse時,將評估apicall()值並將其傳遞給方法。 然而,在orElseGet的情況下,僅當oldValue為空時才進行評估。 orElseGet允許延遲評估。也就是說:orElse(T)無論前面Optional容器是null還是non-null,都會執行orElse里的方法,orElseGet(Supplier)並不會

答案參考如下

https://blog.csdn.net/fy_java1995/article/details/90047828

尚未有邦友回答

立即登入回答