為什麼 Lambda 中的局部變數需要 Finals
在 Java 中,Lambda 中的局部變數必須宣告為 Final。但是,可以修改 lambda 中的實例變數而不受此限制。這種差異源自於局部變數和實例變數之間的根本差異。
局部變數:Lambda 實例中的副本
建立 lambda 時,局部變數會複製到lambda 實例。這意味著對 lambda 內的局部變數的任何修改都僅限於該實例。因此,為了保持局部變數所代表的外部變數的完整性,必須將其宣告為final以防止意外修改。
實例變數:與外部類別共用
另一方面,實例變數不會複製到 lambda 實例中。相反,它們引用外部類別中的相同物件。因此,對 lambda 內的實例變數所做的任何修改也會反映在外部類別中。因此,lambda 中的實例變數不需要最終宣告。
變數作用域觀點
可以從變數作用域的角度來理解差異。局部變數在 lambda 實例內的作用域有限,而實例變數的作用域更廣泛,涵蓋整個外部類別。當將局部變數傳遞給 lambda 時,這種差異至關重要。
為了確保傳遞給 lambda 的局部變數與其表示的外部變數保持一致,需要將它們宣告為 Final。這可以防止因無意的修改而破壞這種一致性。
以上是為什麼 Java 中的 Lambda 會要求局部變數為 Final?的詳細內容。更多資訊請關注PHP中文網其他相關文章!