8000 修正錯字 · JustinSDK/JavaLambdaTutorial@d69c36d · GitHub
[go: up one dir, main page]

Skip to content

Commit d69c36d

Browse files
author
Justin Lin
committed
修正錯字
1 parent 6b6c362 commit d69c36d

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

JavaLambdaTutorial.MD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ public class Hello {
840840

841841
結果會顯示兩次的 “Hello, world!",也就是說,Lambda 表示式本體中的 `this``toString` 實際參考對象,是來自當時包含它們的環境,也就是 `Hello` 實例。也注意到,先前定義的 `compose` 方法中,參數列上並不需要 `final` 關鍵字。
842842

843-
在 〈Java 的稻草人提案〉 中我們看過,如果要在匿名類別中使用外在的區域變數,Java 的編譯器會強制你在區塊變數加上 `final`,即使變數實際上於匿名類別中並不會做任何修改。JDK8 放寬了這個限制,如果變數本身等效於 `final` 區域變數,也就是說,如果變數不會在 Lambda 表示式中有重新指定的重作,就可以不用加上 `final` 關鍵字。
843+
在 〈Java 的稻草人提案〉 中我們看過,如果要在匿名類別中使用外在的區域變數,Java 的編譯器會強制你在區塊變數加上 `final`,即使變數實際上於匿名類別中並不會做任何修改。JDK8 放寬了這個限制,如果變數本身等效於 `final` 區域變數,也就是說,如果變數不會在 Lambda 表示式中有重新指定的動作,就可以不用加上 `final` 關鍵字。
844844

845845
不過,我們可以在 Lambda 表示式中改變被捕捉的變數值嗎?像是在 JavaScript 或 Scala 中可以做到的事情?因為可重新指定的閒置變數(Free variable)也代表著可變的狀態,而可變狀態代表著在並行程式設計(JDK8 會想要採用 Lambda 的理由之一)會有鎖定問題,JDK8 特意禁止你捕捉可變動的區域變數。你無法在 Lambda 表示式中改變被捕捉的變數值。
846846

0 commit comments

Comments
 (0)
0