3 回答

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

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

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