在Java中如何遍歷特定類的每個對象,還是必須跟蹤每個對象,因爲我使用引用數組構造/銷燬並訪問對象數據?你可以遍歷Java中特定類的每個對象嗎?
回答
如果沒有對象的引用,它們將成爲垃圾回收的候選對象。所以,是的,你必須以某種方式跟蹤它們。你可以但不必爲此使用數組;還有Java的collections。
在Java中,我會用aspects和切入點上一個新的對象initialization(構造函數)
此儀器不會與應用程序的正常運行干擾,你也可以打開或關閉該功能,你想要它。
大多數當前的java工具都支持方面。
獲得特定任意類的所有對象列表而不修改任何現有代碼的唯一方法是探索Java垃圾收集器的奇妙世界。
我不認爲你想這樣做,雖然它在理論上是可能的。更簡單的方法是讓父級構造函數在創建時跟蹤每個實例,並使用一些靜態處理程序註冊它。
但最好的方法可能是使用工廠模式,其中「工廠」類負責相關類的製造和跟蹤實例。
編輯:請注意,您不想在這樣的類中持有對該對象的強引用,否則會阻止任何對象的內存被釋放。 A WeakReference將是必要的。
之前從來沒有聽說過。可能是因爲我從不需要它。很高興知道。 – UmNyobe 2012-02-06 01:46:28
有一些庫可以讓您導航對象圖。看看公地OGNL這裏:http://commons.apache.org/ognl/從開發者指南
報價在這裏找到:http://commons.apache.org/ognl/developer-guide.html
「OGNL作爲一種語言可以爲Java的導航通過一個簡潔的語法,允許你指定,其中可能的對象,對稱可設置和可獲得的值語言指定了一種語法,試圖提供儘可能高的抽象級別來導航對象圖;這通常意味着指定通過和到達JavaBeans屬性,集合索引等的路徑,而不是直接訪問屬性獲得者和制定者(統稱爲訪問者)。「
自從我使用它以來已經有一段時間了,但當時它是不可或缺的。
OGNL不會任意訪問其執行上下文之外的對象。 OP正在問一個不同的問題。 – 2012-02-06 01:22:41
這是真的,它可能無助於上下文明智(我喜歡這方面的答案,並已投票表決。) – Jubal 2012-02-06 01:30:35
你可以做到這一點的唯一方法就是在你想要關注的類內部保留一個靜態列表,然後在構造函數中將每個對象添加到該列表中。
您必須知道,即使您不再使用它們,垃圾收集器也不會收集任何這些對象。
根據這SO question它似乎並不真的有可能在Java中有效地做到這一點。這裏討論了一些相當繁重的方法,但它們略微超出了我的意思,但這個問題中的海報似乎要求類似於您所描述的內容,最後在其編輯中得出結論,它似乎並不是容易完成。
您可以通過將每個新實例存儲在靜態WeakHashSet中來跟蹤一個類的所有實例(也可能是一些額外的)。但我不得不同意你的設計聽起來很可疑。從更詳細的描述來看,這聽起來像窗口需要一組元素(如果它還沒有),它應該可以在屏幕上繪製它們。
- 1. 遍歷NSArray中收集特定對象
- 2. Unity FBX遍歷每個對象
- 3. JAVA遍歷json對象
- 4. Java流遍歷ResultSet對象
- 5. 是可遍歷一個特質或類
- 6. 打印可遍歷對象
- 7. 你可以使用類對象的數據綁定嗎?
- 8. Java - 你可以有多少個對象?
- 9. 如何遍歷自定義vb.net對象的每個屬性?
- 10. 如何遍歷div類中的對象?
- 11. 遍歷對象的ArrayList並打印每個對象的每個變量
- 12. 遍歷對象
- 13. 遍歷對象
- 14. 遍歷JSON對象,並檢查是否特定對象存在
- 15. 你可以投一個對象來擁有特定的功能嗎?
- 16. Java - 你可以將一個對象轉換成它沒有擴展的類嗎?
- 17. 遍歷JsonCpp中的對象
- 18. 遍歷對象數組的Java
- 19. 遍歷java中最快的對象類型
- 20. 使用Prototype在JavaScript中遍歷對象的每個屬性?
- 21. 如何遍歷ElasticSearch索引中的每個對象?
- 22. 遍歷特定JSON
- 23. 在Objective-C中以這種方式遍歷對象圖嗎?
- 24. 循環遍歷類的所有對象
- 25. 通過類的迭代遍歷對象
- 26. 遍歷對象樹
- 27. 遍歷JSON對象
- 28. 遍歷JavaScript對象
- 29. 遍歷JSON對象
- 30. 遍歷JSON對象
你正在製作你自己的'Collection'嗎? – Paul 2012-02-06 01:21:37
爲什麼你想知道這個?這是一個不尋常的事情想知道,所以回答這將幫助我們回答你的問題。這聽起來像你的問題是關於某種方式*做些事情,所以如果你告訴我們你實際上是什麼*試圖做(用簡單的英語),也許我們可以提供一些更優雅的解決方案。 – Bohemian 2012-02-06 01:27:39
@Bohemian我只學了四天Java,所以對我來說很簡單!我正在爲顯示在屏幕上的元素創建一個名爲'Element'的類。它們將被動態地創建,所以這個類所創建的對象的數量不會被預定義。其他幾個類將擴展這個並添加一些方法。我在想的是,每當需要重新打印窗口時,都可以依次查看每個元素對象,只有當可見屬性設置爲「true」時,纔會在屏幕上繪製該對象。 – 2012-02-06 01:38:47