原文:lambda和匿名內部類使用外部變量為什么要語義final?

今天群里討論java的lambda實現. 后來不斷衍生談到了為什么lambda和匿名內部類只能使用語義final的外部變量. 最開始以為是java的lambda實現問題,編譯期魔法會把外部引用作為參數傳入所以在內部變化也影響不了下次調用的值,所以就干脆final了,如果用類的屬性來保管這個變量就可以了. 舉例就是這種情況 lambda用參數傳入外部int,如果在方法里修改了,下次調用這個lambd ...

2018-10-19 16:00 0 1329 推薦指數:

查看詳情

匿名內部類使用外部局部變量為什么只能是final變量

匿名內部類引用的變量會被拷貝一份到內部類的環境中 但其后,在外部,該變量如果被修改,則內部外部不一致 Java為了避免數據不同步的問題,做出了匿名內部類只可以訪問final的局部變量的限制。 究其原因,在於 區域變量 x 並不是真正被拿來於內部匿名類別中使用,而是在內部 ...

Wed Aug 29 00:01:00 CST 2018 0 1082
匿名內部類為什么訪問外部類局部變量必須是final的?

1. 內部類里面使用外部類的局部變量時,其實就是內部類的對象在使用它,內部類對象生命周期中都可能調用它,而內部類試圖訪問外部方法中的局部變量時,外部方法的局部變量很可能已經不存在了,那么就得延續其生命,拷貝到內部類中,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。說白了,內部類會自動 ...

Fri Aug 05 08:03:00 CST 2016 1 13823
Java基礎-內部類-為什么局部和匿名內部類只能訪問局部final變量

先看下面這段代碼:   這段代碼會被編譯成兩個class文件:Test.class和Test1.class。默認情況下,編譯器會為匿名內部類和局部內部類起名為Outterx.class(x為正整數)。   根據上圖可知,test方法中的匿名內部類的名字被起為 Test ...

Mon May 11 00:33:00 CST 2015 1 2265
匿名內部類可以訪問的變量---靜態成員變量final修飾的局部變量

  在學習多線程的時候用到了匿名內部類匿名內部類可以訪問static靜態成員變量或者final修飾的局部變量。   匿名內部類在編譯之后會生成class文件,比如Test內的第一個匿名內部類編譯之后就是Test$1.class;   匿名內部類中訪問的final修飾的局部變量在生成Test ...

Tue Dec 11 06:53:00 CST 2018 0 816
匿名內部類使用

目標 1,匿名內部類的作用。 2,匿名內部類的定義格式。 具體內容 匿名內部類的定義: 沒有名字的內部類。表面上看起來那是它的名字,實際上不是它的名字。 使用匿名內部類的前提: 必須繼承父類或實現一個接口 匿名內部類的分類: 1.繼承式的匿名內部類 2.接口式的匿名內部類 ...

Tue Jun 14 02:11:00 CST 2016 1 6324
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM