2011-07-12 29 views
6

可能重複:
Cannot refer to a non-final variable inside an inner class defined in a different method爲什麼java在內部匿名類中引用非最終變量是不可能的?

爲什麼它在Java中是指在內部匿名類非final的變量是不可能的?簡單的答案是「因爲它被禁止」,但我想知道,爲什麼他們禁止這個有用的功能?也許Java有一些缺乏的能力,或者它是以「錯誤」的方式設計的。我想知道。

+0

看看這篇文章,它可能會有所幫助:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-在不同的 – mandubian

+1

回答這裏:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different – Jacob

+0

@cularis,我已經看過它,但由於編輯它不清楚什麼答案考慮正確。 – dhblah

回答

3

原因是在封閉方法返回後,局部變量不再存在。因此,當匿名類被實例化時,會創建一個變量的副本。如果Java允許事後更改局部變量,那麼匿名類將只知道舊值。

Java的做法與其他語言已知的實際closures相反。

+2

因爲我看到它,禁止存在這樣的錯覺,即保持匿名類直接使用變量而不是副本,並避免人們有錯誤的期望。 –

+0

Michael:確切地說 –

+0

感謝您的回答,但我不確定該變量是否被複制,因爲您可以完美地傳遞最終變量,然後在匿名內部更改其中一個字段,並且該變化將在封閉方法中可見。 – dhblah

相關問題