1. 程式人生 > >為什麼匿名內部類用到的變數必須定為final?

為什麼匿名內部類用到的變數必須定為final?

如果說匿名內部類無法被繼承,那麼也只能說匿名內部類是final的。如果一個類是final的,那麼所有屬於這個類的方法是final的,但它的成員變數並不是。

而且被final的變數還是外部類的,外部類沒有必要不讓自己修改自己的變數的值。

上述情況其實只發生在內部類引用的變數不是成員變數的情況(如果是成員變數就直接用就好了,不用final修飾)。所以我感覺問題出在:編譯的時候,所以的類都會生成相應的class檔案,匿名內部類也不例外。所以如果引數不是final的,那麼匿名內部類裡的資訊初始化會出現一些問題(變數的值有可能來回被修改)。我猜測java的設計者也是想問題簡單化,直接大家都別改了,正好final還能起到這個作用,所以被final了。 :arrow: