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

時間 2021-05-31 20:54:59

1樓:ylxfc

可讀性上,撒加已經說得很明白了,這裡補充下lambda跟匿名內部類的區別

對於大多數剛剛接觸jdk8的同學來說,應該都會認為lambda表示式其實就是匿名內部類的語法糖(包括我自己,在剛剛接觸的時候,也是這樣認為的),但實際上二者還是存在不少差異,其中最主要的兩點就是標識性和作用域。

首先,內部類在建立表示式時,會確保建立乙個擁有唯一標識的新物件,而對於lambda,其計算結果(其實就是乙個對映的過程)可能有也可能沒有唯一標識,這取決於具體實現。

其次,內部類的宣告會建立出乙個新的命名作用域,在這個作用域中,this與super指向內部類本身的當前例項;但是lambda恰恰相反,它不會引入任何新的命名環境,這樣就避免了內部類名稱查詢的複雜性,名稱查詢會導致很多問題,比如想要呼叫外圍例項的方法時卻錯誤的呼叫了內部類例項的Object方法。

2樓:

我覺得。。對於我們這些喜歡fp的人來說。確實變得易讀易懂怎麼看怎麼舒服。

然後和我合作程式設計的幾個人就表示他們完全看不懂我在寫什麼。。。

Java8的Optional是不是雞肋?

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

Python3 10的新特性match關鍵字為什麼不會和當前作用域的變數名稱match衝突?

Ivony 上下文關鍵字嘛,沒什麼特別的。C 從第乙個版本就支援上下文關鍵字,get和set。然後從第乙個版本就沒有再增加過任何乙個非上下文關鍵字,算是把上下文關鍵字用到極致了 那麼乙個語言可不可以沒有任何關鍵字,全部都是上下文關鍵字和可過載的運算子呢?理論上是可以的,但是實際上這種語言會非常難用 ...

如何評價C 17中的新特性fold expression?

不知道為啥這麼多人反對。雖然。有些複雜不直觀。而且功能不強大,還完全可以通過其他方式代替,同時其他方式的實現還可以完成更多的功能。但是至少這種方法寫起來稍微。短那麼一些。 原子筆 C 標準委員會,只需引入乙個別的指令碼語言,放預處理後編譯期前去解釋執行,就可以簡單解決這些各種問題 巨集的功能太弱,但...