亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Java在構造函數中泄漏了這個

Java在構造函數中泄漏了這個

郎朗坤 2019-10-31 12:54:01
為什么IDE會抱怨“在構造函數中泄漏”?我一直認為這只是一種不好的做法。但是我實際上從來沒有發現為什么它不好。
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

this構造函數(而不是控制器)中泄漏引用很危險,尤其是在多線程環境中。這是因為在構造函數調用完成之前,對象尚未完全構造。this因此,從構造函數中泄漏出來意味著外部世界可以訪問尚未完全構建的對象。這可能不一定會導致單線程程序出現問題(盡管有可能,但是這種情況下的問題更加明顯)。但是,如果this泄漏到其他線程,則它們實際上可以嘗試在對象構造完成之前對對象執行某些操作,這將導致難以發現的錯誤。


查看完整回答
反對 回復 2019-10-31
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

生活中沒有絕對的東西,例如。您必須繳稅...或...死亡是不可避免的。但是,“傳出this構造函數總是不好的”是其中之一。

彼得指出的警告是恰當和有效的。this從構造函數泄漏到引用將被發布給未知或不受信任的客戶端的任何方法或上下文中肯定會出現問題。對于尚未構造的對象的引用,發布對任何客戶端代碼(無論是否受信任)的引用仍然很糟糕,該客戶端代碼假設它具有對有效且一致的對象的看法。

就是說,this從構造方法傳遞到程序包私有的方法絕對沒有錯,該方法對一組共享公共接口的對象執行公共初始化,特別是在初始化時間長或復雜的情況下。

TL; DR:在我看來,在某些情況下,不僅可以接受this構造函數的傳遞,而且實際上希望這樣做。


查看完整回答
反對 回復 2019-10-31
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

只是不要這樣做。我們只是浪費了很多時間來解決幾年前創建的錯誤,當時有人將構造函數中的“ this”傳遞給“可信任的”“ package private”方法。隨著時間的流逝,該方法逐漸發展壯大,并且未初始化的實例進入了事件隊列。構造后只需使用最終的init(),即可成為匿名英雄

查看完整回答
反對 回復 2019-10-31
  • 3 回答
  • 0 關注
  • 476 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號