我需要獲取一個類創建的所有對象。有沒有預先建立的方法 在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. 我可以使用忽略的特定方法創建java對象嗎?
- 5. 有什麼方法可以創建/獲取並返回一個類<T<?, ?>>對象?
- 6. 爲什麼不使用apply方法可以創建Map對象?
- 7. 有什麼方法可以知道對象的類型?
- 8. 有什麼方法可以創建幾種類型的容器?
- 9. 有什麼方法可以獲取特定城市的所有Facebook活動?
- 10. 在Java中創建對象的正確方法是什麼?
- 11. 有什麼方法可以創建自定義的VoiceOver手勢?
- 12. 獲取UnmarshalException而從XSD創建Java對象爲特定的XML
- 13. 創建具有特定方法的類在Java中
- 14. 什麼方法在基於Django類的CreateView中創建對象?
- 15. 有什麼方法可以創建一個類的對象,該類的對象具有C++中該類的對象?
- 16. 使用java中的main方法爲類創建對象時發生了什麼
- 17. 如何將對象創建限制到特定類的方法?
- 18. 如果無法創建抽象類的新對象,抽象類中的非抽象方法有什麼意義?
- 19. 爲什麼你可以通過創建一個對象來調用main方法中的非靜態方法? Java
- 20. 動態創建對象的正確Java方法是什麼?
- 21. 有什麼辦法可以在java中實現'抽象類方法'嗎?
- 22. 一種可以創建對象的類方法
- 23. 有什麼方法可以在特定文化中獲得書寫方向?
- 24. 爲什麼singleton對象是通過類方法創建的?
- 25. 有什麼辦法可以在MySQL中創建用戶特定的表「指針」?
- 26. 從對象中獲取特定類型
- 27. 從Java中的HashSet獲取特定的類對象
- 28. 爲什麼這個對象可以訪問父類的方法?
- 29. 有什麼方法可以從對象中清除R環境?
- 30. 你可以遍歷Java中特定類的每個對象嗎?