3 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
this
在構(gòu)造函數(shù)(而不是控制器)中泄漏引用很危險(xiǎn),尤其是在多線程環(huán)境中。這是因?yàn)樵跇?gòu)造函數(shù)調(diào)用完成之前,對(duì)象尚未完全構(gòu)造。this
因此,從構(gòu)造函數(shù)中泄漏出來(lái)意味著外部世界可以訪問(wèn)尚未完全構(gòu)建的對(duì)象。這可能不一定會(huì)導(dǎo)致單線程程序出現(xiàn)問(wèn)題(盡管有可能,但是這種情況下的問(wèn)題更加明顯)。但是,如果this
泄漏到其他線程,則它們實(shí)際上可以嘗試在對(duì)象構(gòu)造完成之前對(duì)對(duì)象執(zhí)行某些操作,這將導(dǎo)致難以發(fā)現(xiàn)的錯(cuò)誤。

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
生活中沒(méi)有絕對(duì)的東西,例如。您必須繳稅...或...死亡是不可避免的。但是,“傳出this
構(gòu)造函數(shù)總是不好的”是其中之一。
彼得指出的警告是恰當(dāng)和有效的。this
從構(gòu)造函數(shù)泄漏到引用將被發(fā)布給未知或不受信任的客戶端的任何方法或上下文中肯定會(huì)出現(xiàn)問(wèn)題。對(duì)于尚未構(gòu)造的對(duì)象的引用,發(fā)布對(duì)任何客戶端代碼(無(wú)論是否受信任)的引用仍然很糟糕,該客戶端代碼假設(shè)它具有對(duì)有效且一致的對(duì)象的看法。
就是說(shuō),this
從構(gòu)造方法傳遞到程序包私有的方法絕對(duì)沒(méi)有錯(cuò),該方法對(duì)一組共享公共接口的對(duì)象執(zhí)行公共初始化,特別是在初始化時(shí)間長(zhǎng)或復(fù)雜的情況下。
TL; DR:在我看來(lái),在某些情況下,不僅可以接受this
構(gòu)造函數(shù)的傳遞,而且實(shí)際上希望這樣做。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
只是不要這樣做。我們只是浪費(fèi)了很多時(shí)間來(lái)解決幾年前創(chuàng)建的錯(cuò)誤,當(dāng)時(shí)有人將構(gòu)造函數(shù)中的“ this”傳遞給“可信任的”“ package private”方法。隨著時(shí)間的流逝,該方法逐漸發(fā)展壯大,并且未初始化的實(shí)例進(jìn)入了事件隊(duì)列。構(gòu)造后只需使用最終的init(),即可成為匿名英雄
添加回答
舉報(bào)