第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lambdas:局部變量需要final,實例變量不需要

Lambdas:局部變量需要final,實例變量不需要

慕妹3146593 2019-08-17 15:38:23
Lambdas:局部變量需要final,實例變量不需要在lambda中,局部變量需要是final,但實例變量不需要。為什么這樣?
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊

在項目文件lambda:Lambda v4的狀態(tài)

根據(jù)第7節(jié),變量捕獲,提到....

我們的意圖是禁止捕獲可變的局部變量。原因是這樣的成語:

int sum = 0;list.forEach(e -> { sum += e.size(); });

基本上是連續(xù)的; 寫這樣沒有競爭條件的lambda體是很困難的。除非我們愿意強(qiáng)制執(zhí)行 - 最好是在編譯時 - 這樣的函數(shù)無法逃避其捕獲線程,否則這個特性可能會導(dǎo)致比它解決的更多麻煩。

編輯:

另外需要注意的是,當(dāng)你在內(nèi)部類中訪問它們時,局部變量在內(nèi)部類的構(gòu)造函數(shù)中傳遞,而這對于非最終變量不起作用,因為非最終變量的值可以在構(gòu)造之后更改。

在實例變量的情況下,編譯器傳遞類的引用,類的引用將用于訪問實例變量。因此,在實例變量的情況下不需要它。

PS:值得一提的是,匿名類只能訪問最終的局部變量(在JAVA SE 7中),而在Java SE 8中,您可以有效地訪問lambda內(nèi)部的最終變量以及內(nèi)部類。


查看完整回答
反對 回復(fù) 2019-08-17
?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

因為實例變量總是通過對某個對象的引用的字段訪問操作來訪問,即some_expression.instance_variable。即使您沒有通過點表示法顯式訪問它,例如instance_variable,它也被隱含地視為this.instance_variable(或者如果您在內(nèi)部類中訪問外部類的實例變量OuterClass.this.instance_variable,那么它是在引擎蓋下this.<hidden reference to outer this>.instance_variable)。

因此,永遠(yuǎn)不會直接訪問實例變量,而您直接訪問的實際“變量” this(由于它不可分配,因此是“有效的最終”),或者是某個其他表達(dá)式開頭的變量。


查看完整回答
反對 回復(fù) 2019-08-17
  • 3 回答
  • 0 關(guān)注
  • 696 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號