我需要獲取一個類創建的所有對象。有沒有預先建立的方法 在Java API中做到這一點?有什麼方法可以獲取Java中特定類創建的對象?
2
A
回答
2
它沒有內置到API中,因爲在Java中沒有「由對象創建」這樣的事物。你可以爲此使用緩存。但它沒有內置到Java中。你必須保持這一點。使用Factory方法可以節省一些麻煩,所以您不要忘記將其存儲在緩存中。
class Creator {
Set<Stuff> set = new HashSet<Stuff>();
// each time you create an object, do this
void foo() {
Stuff stuff = // what you create
set.put(stuff);
}
// you get them like
Set<Stuff> objectsCreatedByThis() { return Collections.unmodifiableSet(stuff); }
}
有一點需要關注的是,這會導致內存泄漏的高度可能性。你可以使用WeakReferences來解決這個問題,這樣當每個其他線程都失去對象的訪問時,這個集合也是如此。畢竟,你不希望你的設置只存儲一切,所以它永遠不會GC'd。
1
不是。標準語言和標準API沒有任何幫助。您唯一的機會是將您的問題限制在完全受您控制的某個域中。然後,您可以使用某種工廠的參考跟蹤或直接在構造函數中使用。
但要小心:一個天真的實現將永遠保持對所有對象的引用,這將破壞垃圾回收。 java.lang.ref.Reference<T>
和相關的東西可能有幫助。但坦率地說 - 這不適合初學者。
相關問題
- 1. 有什麼方法可以創建特定FnMut的別名?
- 2. 獲取或創建對象的方法的名稱是什麼?
- 3. 有什麼方法可以知道什麼時候創建了一個對象?
- 4. 有什麼方法可以創建/獲取並返回一個類<T<?, ?>>對象?
- 5. 爲什麼不使用apply方法可以創建Map對象?
- 6. 有什麼方法可以知道對象的類型?
- 7. 有什麼方法可以創建幾種類型的容器?
- 8. 在Java中創建對象的正確方法是什麼?
- 9. 獲取UnmarshalException而從XSD創建Java對象爲特定的XML
- 10. 有什麼方法可以創建自定義的VoiceOver手勢?
- 11. 有什麼方法可以創建一個類的對象,該類的對象具有C++中該類的對象?
- 12. 如何將對象創建限制到特定類的方法?
- 13. 爲什麼你可以通過創建一個對象來調用main方法中的非靜態方法? Java
- 14. 動態創建對象的正確Java方法是什麼?
- 15. 有什麼辦法可以在java中實現'抽象類方法'嗎?
- 16. 一種可以創建對象的類方法
- 17. 有什麼方法可以在特定文化中獲得書寫方向?
- 18. 爲什麼singleton對象是通過類方法創建的?
- 19. 你可以遍歷Java中特定類的每個對象嗎?
- 20. 爲什麼這個對象可以訪問父類的方法?
- 21. 什麼是Objective-C獲取可空對象的方法?
- 22. 有什麼方法可以從對象中清除R環境?
- 23. 是否有一種簡單的方法來獲取Java中特定類的所有對象實例
- 24. 以太坊。有什麼方法可以通知合同創建?
- 25. 我可以創建一個構造方法的對象,當我創建C#類
- 26. Java方法如何檢索與特定方法有關的方法對象? (Java)
- 27. 以這兩種方式創建對象有什麼區別?
- 28. 有什麼方法可以定製TDBadgedCell
- 29. 在對象內部創建原型方法有什麼缺點?
- 30. 有沒有什麼方法可以將Ember對象轉換爲純javascript對象?