我有一些經常創建/銷燬的對象,可以同時存在於多個列表中。爲了確保我沒有剩下的引用,對象有一個isDestroyed標誌,如果設置了這個標誌,每個列表都負責從列表中刪除對象。監控Java對象破壞
但是,這是內存泄漏的原因。如果我忘記從列表中刪除對象會怎麼樣?爲了直觀地監控程序的行爲是否正確,我重寫finalize並增加一個全局變量來跟蹤破壞(不是正式的測試,只是爲了得到一個想法)。然而,由於我無法控制GC,理論上我可以永遠等待,直到有些東西被摧毀。
所以這個問題是雙重的:當擁有多個列表中的對象時,是否將「isDestroyed」視爲控制對象生命期的好方法?它會強制每個使用該對象的人注意將其從列表中刪除,這看起來很糟糕。
而且,有沒有什麼好方法可以看到引用計數何時在對象上達到零,也就是說當它的計劃被銷燬?
編輯:更具體地說,在我的情況下,我的對象代表房間中的物理實體。而且我有一個經理類來繪製每個對象,因此它在一個列表中。另一個列表包含所有可點擊的對象,所以我有另一個列表。在這種情況下,在一個列表中使用所有對象並使用多態或實例不是一個選項。當一個對象被「銷燬」時,它不應該以任何方式顯示或點擊,因此我想從兩個列表中刪除它。
香港專業教育學院只用觀察員的事件,但是這是一個有趣的想法,例如一個ArrayList延伸到處理這個(事情。我會避免WeakReference引起的空檢查。更好的辦法是以某種方式防止同事把對象放在例如一個正常的arraylist中 – Rolle 2012-04-18 22:12:36
我建議(如果可行)不要擴展'ArrayList',而是在你自己的類中實現'List',使用'ArrayList'作爲後臺存儲(* Decorator *模式)。你也可以發明一個新的界面,「Destroyable」,並強制執行人們使用的列表必須是「Destroyable」的策略。另一個想法是一個接口'DestroyableList extends List'。 – 2012-04-19 07:18:20