Java8的Optional是不是雞肋?

時間 2021-05-05 18:17:42

1樓:麼西

個人感覺是有點,主要是覺得缺點東西。optional告訴你乙個物件可能是空,但是沒有一種寫法告訴你什麼樣的物件肯定不是空讓你可以不判空大膽用,就讓optional顯得沒有那麼有用,沒覺得比if else好很多。

假如乙個方法返回Optional代表可能為空,如果乙個方法返回String代表這個肯定不為空就好了。像kotlin那樣設計就好了,要不再設計個NotNull<>?

2樓:童軍水

是的,為了解決乙個舊問題,產生了多個新問題,典型的雞肋,請問:

1、null問題解決了麼?是不是還需要判斷。

2、學習新語法,難道不需要時間麼?

我看到資料庫查詢的時候,返回這個,暈菜,難道我不知道可能查不到嗎?現在沒查到,不需要判斷null嗎?

3樓:消失的影子

並不是雞肋,相反是很有用的設計,只不過因為以前的生態直接使用null的地方太多了,所以一時半會兒改不過來。

一般的物件之所以必須要要有 null 值是因為 null 值有它的現實意義,例如乙個model與資料庫記錄的對映,資料庫裡某條記錄的某個字段就是null,你不用null去對映你能怎麼辦嘛?

還有比如我們方法返回某個值的時候,例如 map 裡根據 key 獲取 value,你 get 的時候沒找到該 key 如果不返回 null 的話怎麼辦嘛?

而 optional 則沒有為 null 的必要,它的意義就是用來包裝乙個可能為 null 的值的,原先執行時可能返回 null 的方法,現在用 optional 進行包裝,我們就知道:這個值可能為 null,我們如果想處理 optional 就必須進行 null 值情況的處理,相當於是編譯時進行 null 的處理。

Java 8的新特性lambda表示式是否比匿名內部類具有更好的可讀性?

ylxfc 可讀性上,撒加已經說得很明白了,這裡補充下lambda跟匿名內部類的區別 對於大多數剛剛接觸jdk8的同學來說,應該都會認為lambda表示式其實就是匿名內部類的語法糖 包括我自己,在剛剛接觸的時候,也是這樣認為的 但實際上二者還是存在不少差異,其中最主要的兩點就是標識性和作用域。首先,...

Java 死鎖是如何產生的?

浮生若夢 場景如下 兩個執行緒a,b。a執行緒 對應資源000,資源000中包含一支筷子和一把刀。b執行緒 對應資源111,資源111中包含乙個叉子和一筷子。執行 執行緒a和b同時進行。假設a執行緒代表中中國人。中中國人吃飯需要資源000 中的筷子和資源111中的筷子。那麼假設b執行緒代表外中國人,...

Java 裡的static是幹嘛的?

陳橙 static 修飾的成員變數和成員方法在記憶體中只有乙份,這個類的所有例項共享這乙個,其中乙個物件修改了,其他的物件拿到的值也會相應的修改。static 修飾的成員變數和成員方法可以在不建立例項的情況下使用 className.name 非static的方法只能通過建立例項,通過例項進行訪問,...