2011-10-09 51 views

回答

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>和相關的東西可能有幫助。但坦率地說 - 這不適合初學者。

相關問題