File tree Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Expand file tree Collapse file tree 1 file changed +1
-1
lines changed Original file line number Diff line number Diff line change @@ -840,7 +840,7 @@ public class Hello {
840
840
841
841
結果會顯示兩次的 “Hello, world!",也就是說,Lambda 表示式本體中的 ` this ` 與 ` toString ` 實際參考對象,是來自當時包含它們的環境,也就是 ` Hello ` 實例。也注意到,先前定義的 ` compose ` 方法中,參數列上並不需要 ` final ` 關鍵字。
842
842
843
- 在 〈Java 的稻草人提案〉 中我們看過,如果要在匿名類別中使用外在的區域變數,Java 的編譯器會強制你在區塊變數加上 ` final ` ,即使變數實際上於匿名類別中並不會做任何修改。JDK8 放寬了這個限制,如果變數本身等效於 ` final ` 區域變數,也就是說,如果變數不會在 Lambda 表示式中有重新指定的重作 ,就可以不用加上 ` final ` 關鍵字。
843
+ 在 〈Java 的稻草人提案〉 中我們看過,如果要在匿名類別中使用外在的區域變數,Java 的編譯器會強制你在區塊變數加上 ` final ` ,即使變數實際上於匿名類別中並不會做任何修改。JDK8 放寬了這個限制,如果變數本身等效於 ` final ` 區域變數,也就是說,如果變數不會在 Lambda 表示式中有重新指定的動作 ,就可以不用加上 ` final ` 關鍵字。
844
844
845
845
不過,我們可以在 Lambda 表示式中改變被捕捉的變數值嗎?像是在 JavaScript 或 Scala 中可以做到的事情?因為可重新指定的閒置變數(Free variable)也代表著可變的狀態,而可變狀態代表著在並行程式設計(JDK8 會想要採用 Lambda 的理由之一)會有鎖定問題,JDK8 特意禁止你捕捉可變動的區域變數。你無法在 Lambda 表示式中改變被捕捉的變數值。
846
846
You can’t perform that action at this time.
0 commit comments