3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
因?yàn)槟_保將您instances.add(this)放在構(gòu)造函數(shù)的末尾,所以恕我直言,應(yīng)該安全地告訴編譯器僅禁止顯示警告 (*)。警告從本質(zhì)上說,不一定意味著有什么問題,只需要引起您的注意。
如果您知道自己在做什么,則可以使用@SuppressWarnings注釋。就像Terrel在他的評(píng)論中提到的那樣,從NetBeans 6.9.1開始,以下注釋可以做到這一點(diǎn):
@SuppressWarnings("LeakingThisInConstructor")
(*)更新:正如Isthar和Sergey指出的那樣,在某些情況下,“泄漏”構(gòu)造函數(shù)代碼看起來非常安全(如您所提的問題),但事實(shí)并非如此。還有更多的讀者可以批準(zhǔn)嗎?由于上述原因,我正在考慮刪除此答案。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是創(chuàng)建工廠實(shí)例實(shí)例的工廠會(huì)有所幫助的一個(gè)好例子。如果Factory負(fù)責(zé)創(chuàng)建類的實(shí)例,則將在一個(gè)集中位置調(diào)用構(gòu)造函數(shù),并且將必需的init()方法添加到代碼中將變得很簡單。
關(guān)于您的立即解決方案,我建議您將泄漏的所有調(diào)用移到this構(gòu)造函數(shù)的最后一行,然后在“證明”這樣做是安全的之后,使用注釋將它們隱藏。
在IntelliJ IDEA中,可以在行上方的以下注釋中取消此警告:
//noinspection ThisEscapedInObjectConstruction
添加回答
舉報(bào)